Фоновая служба останавливается, когда активность прекращается, останавливается или принудительно закрывается
Моя проблема заключается в том, что когда IM нажимает кнопку "Домой" и закрывает мое приложение, в это время фоновая служба останавливается, и после этого требуется снова запустить приложение в приложении, после чего запускается фоновая служба, так как я могу сделать как Whatssapp, если приложение закроется или будет отключено, а затем может Работать в фоновом режиме.....
3 ответа
У меня такая же проблема. Когда вы проводите приложение из области уведомлений, процесс фоновой службы останавливается.
Вы можете добавить следующий код в свой сервис или посмотреть этот вопрос
@Override
public void onTaskRemoved(Intent rootIntent){
Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
restartServiceIntent.setPackage(getPackageName());
PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 1000,
restartServicePendingIntent);
super.onTaskRemoved(rootIntent);
}
Этот код делает то, что он перезапускает процесс вашего приложения после его уничтожения, когда ваша активность уничтожается.
Это очень просто, просто следуйте сценариям ниже по ссылке.
Продолжить обслуживание, даже если приложение удалено из приложения Недавние
ваш сервис и процессы (потоки выполняются внутри вашего сервиса) будут оставаться непрерывными.
Хорошо, я просто догадываюсь - действительно не хочу проверять весь код для вашего приложения.
Начать обслуживание можно двумя способами:
- Используя bindService(), что вы, вероятно, делаете здесь. Это хорошо, но означает, что служба будет удалена, как только последний клиент отключит ее (что вы, вероятно, делаете в каком-то методе onPause().
- Использование команды startService(). В таком случае служба будет работать до тех пор, пока вы ее остановите, или система посчитает, что эта служба использует слишком много памяти, которая должна быть использована для более срочной задачи (например, некоторая жирная активность).
Быстрое решение вашей проблемы (если мои догадки верны) - переключение службы для запуска в режиме "startService". Если вы не хотите много играть со своим кодом, лучше всего поместить его в метод onBind () вашего сервиса (просто попробуйте запустить сервис из себя). Конечно, это не запустит сервис, но переключит его режим на "длительный, реальный фоновый режим". Это не решит всех ваших проблем, как я уже упоминал выше - система все еще может быть убита системой, чтобы получить больше ресурсов. Вы можете предотвратить это несколькими способами: если вы действительно хотите, чтобы служба работала, вам следует подумать об использовании службы переднего плана (Google google), которая увеличит шансы службы на выживание. Но лучший вариант - просто использовать жизненный цикл сервиса, сохранять данные при необходимости и загружать их при запуске сервиса, как вы должны делать с активностью. Для долго работающих фоновых сервисов также есть опция start sticky, которая будет запускать сервис после каждого уничтожения, сбоя и т. Д.