删除服务被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()没有立即调用(可能会在一段时间后调用),所以通知没有被删除