我创建了一个应用程序,在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 OS本身销毁Service时如何删除通知?
答案 0 :(得分:0)
您应该在想要停止服务的地方使用它,这将关闭您的通知和终止服务。
stopService(new Intent(MainActivity.this,MyService.class));
答案 1 :(得分:0)
始终在super.onDestroy();
之前而不是之后调用您的代码
@Override
public void onDestroy()
{
nm.cancel(R.string.service_started);
super.onDestroy();
}
答案 2 :(得分:0)
您是否尝试过notificationManager.cancelAll()
如果您定位的是API 24+ stopForeground(Service.STOP_FOREGROUND_REMOVE)
或stopForeground(true)
另外,您可能应该研究onTrimMemory()和onLowMemory(),它们在操作系统销毁服务时会被调用。
答案 3 :(得分:0)
只需使用
stopForeground(true)
工作完成后,它将破坏前台通知。
答案 4 :(得分:-1)
很可能你没有停止服务