Удалить уведомление, когда служба уничтожена ОС 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 для жизненного цикла работает должным образом.

Скорее всего, вы не прекращаете свою услугу

Другие вопросы по тегам