Как перезапустить службу после получения Killed приложениями, такими как «Advanced Task Killer»?

У меня есть открытый класс, который «расширяет службу», и эта служба запускается из активности с использованием startService (…). Но после того, как я использую Advanced Task Killer , служба будет убита и больше не будет перезапущена.

Я заметил, что некоторые приложения, такие как Facebook Messenger Android App, перезапускаются автоматически даже после их убийства из Advanced Task Killer … как это делают приложения facebook / twitter?

Введите описание изображения здесь

Solutions Collecting From Web of "Как перезапустить службу после получения Killed приложениями, такими как «Advanced Task Killer»?"

Если вы хотите перезапустить службу автоматически после того, как ее убили другим процессом, вы можете использовать следующие константы в своей службе,

@Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } 

Вы можете найти более подробную информацию о START_STICKY & START_NON_STICKY,

START_STICKY и START_NOT_STICKY

Также, пожалуйста, предоставьте свой код для более конкретного ответа.

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

 Calendar cal = Calendar.getInstance(); Intent intent = new Intent(this, MyService.class); PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); // Start every minute alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60*1000, pintent); 

Вы можете запустить этот код, когда пользователь запустит приложение (т. Е. В oncreate первого действия), но вы должны проверить, выполнено ли это, поэтому, вероятно, будет лучше, если вы создадите широковещательный приемник, чем запускает этот код на Перезагрузка системы.

Сделайте onStartCommand () в своем сервисе return START_STICKY

  /** * Constant to return from {@link #onStartCommand}: if this service's * process is killed while it is started (after returning from * {@link #onStartCommand}), then leave it in the started state but * don't retain this delivered intent. Later the system will try to * re-create the service. Because it is in the started state, it will * guarantee to call {@link #onStartCommand} after creating the new * service instance; if there are not any pending start commands to be * delivered to the service, it will be called with a null intent * object, so you must take care to check for this. * * <p>This mode makes sense for things that will be explicitly started * and stopped to run for arbitrary periods of time, such as a service * performing background music playback. */ public static final int START_STICKY = 1;