Удалить уведомление, когда служба уничтожена ОС Android
Я создал приложение, которое показывает уведомление, когда Service.onStartCommand()
метод выполнен и скрыть уведомление, когда Service.onDestroy()
называется. Он отлично работает для обычных вызовов startService() и stopService().
Сервисный код:
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
super.onCreate();
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
//Some code here
showNotification();
return START_NOT_STICKY;
}
@Override
public void onDestroy()
{
super.onDestroy();
nm.cancel(R.string.service_started);
}
Проблема: когда мой сервис уничтожен ОС Android () (в случае, когда onDestroy()
не вызывается) тогда уведомление не удаляется. Так как же удалить уведомление, когда Сервис уничтожен самой ОС Android?
2 ответа
Вы должны использовать это, когда захотите остановить службу, которая закроет ваше уведомление и завершит обслуживание.
stopService(new Intent(MainActivity.this,MyService.class));
Всегда называйте свой код ДО super.onDestroy();
и не ПОСЛЕ
@Override
public void onDestroy()
{
nm.cancel(R.string.service_started);
super.onDestroy();
}
Просто используйте
stopForeground(true)
Когда ваша работа будет завершена, уведомление переднего плана будет уничтожено.
Ты пробовала notificationManager.cancelAll()
Если вы ориентируетесь на API 24+ stopForeground(Service.STOP_FOREGROUND_REMOVE)
или stopForeground(true)
Также вам, вероятно, следует изучить onTrimMemory() и onLowMemory(), которые вызываются функцией, когда ОС уничтожает вашу службу.
Переопределение метода onStop для жизненного цикла работает должным образом.