Обработка активности и жизненного цикла сервиса - PullRequest
0 голосов
/ 22 апреля 2019

Я разрабатываю приложение, которое будет выполнять некоторую фоновую функцию внутри JobIntentService.

Пользователь инициирует действие с экрана A. Запущена фоновая служба намерений.После того как служба Intent завершает свою работу, она отправляет обратный вызов на экран A, а затем на экран Sartes Screen B, который использует результаты службы Intent.

Моя проблема заключается в том, что пользователь запускает действие, а затем сворачивает приложение.и затем ОС Android очищает экран A из-за работы на малой памяти, а затем служба отправляет обратный вызов.

Мой вопрос сейчас, так как экран А больше не существует, получит ли он обратный вызов?Можно ли выяснить, что экран A должен быть очищен ОС Android, чтобы мой сервис мог напрямую запускать экран B?

Кроме того, как можно обработать такой сценарий?

Любое предложение будет благодарным.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Лучше всего создать автономный BroadcastReceiver. Это гарантирует, что ваше приложение может отвечать на трансляцию, независимо от того, запущена Служба или нет. В этом случае вы можете проверить в сервисе активность еще жива или нет. затем принять решение по этому вопросу.

Используйте метод ниже с вашим именем пакета. Он вернет истину, если какие-либо ваши действия будут на переднем плане.

public boolean isForeground(String myPackage) {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(1); 
    ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
    return componentInfo.getPackageName().equals(myPackage);
}
1 голос
/ 22 апреля 2019

Кроме того, как можно обработать такой сценарий?

Вы можете решить это по важности фоновой задачи.

Если вы считаете, что ваша фоновая задача важна для уведомления пользователя, тогда Вы можете создать Уведомление после выполнения фоновой работы. Таким образом, ваш пользователь получит обновление вашей задачи. Вы можете установить для результатов поиска значение Intent и запустить свой экран B после уведомления.

Если не важно уведомлять пользователя, вы можете сохранить результат фоновой задачи, а когда пользователь вернется в ваше приложение, вы можете отправить пользователя на экран B.

Редактировать:

Я думаю, что когда ваша активность находится в фоновом режиме и завершается системой, то запуск действия из фоновой службы не является хорошим UX. Поскольку пользователь может выполнять какое-то важное задание (игра, потоковое вещание и т. Д.) В другом приложении. Что даст пользователю плохой пользовательский опыт.

...