删除服务被android操作系统破坏时的通知

删除服务被android操作系统破坏时的通知,android,service,android-ondestroy,Android,Service,Android Ondestroy,我创建了一个应用程序,它在执行Service.onStartCommand()方法时显示通知,在调用Service.onDestroy()时隐藏通知。它适用于对startService()和stopService()的正常调用 服务代码: @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate();

我创建了一个应用程序,它在执行
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 OS()破坏时(如果未调用
onDestroy()
时),则通知不会被删除。那么,当服务被android操作系统本身破坏时,如何删除通知呢?

最有可能的情况是,您没有停止您的服务

您应该在您想要停止服务的地方使用此选项,它将关闭您的通知并结束服务

stopService(new Intent(MainActivity.this,MyService.class));

始终在
super.ondestory()之前调用代码而不是之后

@Override
public void onDestroy() 
{
    nm.cancel(R.string.service_started);
    super.onDestroy();
}

您是否尝试过notificationManager.cancelAll()

如果您的目标是API 24+
stopForeground(Service.STOP\u FOREGROUND\u REMOVE)
stopForeground(true)

此外,您可能还应该查看操作系统破坏您的服务时调用了哪些函数。

只需使用

stopForeground(true)

当您的工作将完成时。它将破坏前台通知。

我正在停止服务,在这种情况下,这可以正常工作。但当我的服务被android OS()破坏时(可能是内存不足或其他原因),如何删除notification@user1041858为什么您认为在这种情况下不会调用onDestroy?当android系统自动销毁服务时,我遇到了这个问题。@user1041858文档说在这种情况下会调用onDestroy。但是我从来没有检查过。但是在这种情况下,onDestroy()没有立即调用(可能会在一段时间后调用),所以通知没有被删除