Итак, у меня есть сервис, который его onDestory()
выглядит следующим образом:android - если услуга onDestory() не гарантируется, вызывается, где я должен отпускать/удалять слушателей и т. Д.?
@Override
public void onDestroy() {
super.onDestroy();
stopLocationUpdates();
googleApiClient.disconnect();
Foreground.get(this).removeListener(this);
// Here I have some code which sets shared preferences values
phoneDataManager.markLastLocation();
toastHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "service onDestroy", Toast.LENGTH_SHORT).show();
}
});
}
Как вы можете видеть, у меня есть много здесь происходит (отключение и остановка обновления местоположения, сделать некоторые изменения в базе данных SQLite, и установить некоторые SharedPreferences
значения
из того, что я прочитал, onDestory
не гарантировано назвать один сценарий, что я видел, что он не дозвонились это -..
Запуск услуги -> закрывающая приложения (удаление из список приложений) -> Я предоставляю услуги на переднем плане с помощью service.startForeground(1, notification);
, Квитанция показывает -> щелкнув действие уведомления, которое выстреливает BroadcastReceiver
:
public class ServiceShutDownReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context.getApplicationContext(), LocationService.class);
context.stopService(serviceIntent);
}
}
context.stopService(serviceIntent);
должен вызов onDestory
но не дозвонились -> так что весь код в onDestory
не было казнены.
Какова наилучшая практика для этой проблемы? В идеале я хочу, чтобы код кода, который гарантировал, должен быть вызван, когда служба остановлена.
«Я хочу иметь кусок кода, который, как гарантируется, будет вызываться, когда служба остановлена» - этого не существует. Гарантируется, что будет вызываться 'onDestroy()', ваш процесс будет прекращен (в этом случае все ваши слушатели и прочее уже исчезли), или вы разбились с необработанным исключением. – CommonsWare
получил. так что об общих предпочтениях и материалах БД, я думаю, что было бы лучше иметь другой класс, который будет работать над всем этим, и называть его извещателя. благодаря! –