10

我创建了一个应用程序,它在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()没有被调用),那么通知不会被删除。那么当Service被android OS本身销毁时如何删除通知呢?

4

5 回答 5

1

始终在之前super.onDestroy();而不是之后调用您的代码

@Override
public void onDestroy() 
{
    nm.cancel(R.string.service_started);
    super.onDestroy();
}
于 2019-02-07T12:39:43.230 回答
0

您应该在您想要停止服务的地方使用它,这将关闭您的通知并终止服务。

stopService(new Intent(MainActivity.this,MyService.class));
于 2014-07-24T05:36:42.240 回答
0

你有没有尝试过notificationManager.cancelAll()

如果您的目标是 API 24+stopForeground(Service.STOP_FOREGROUND_REMOVE)stopForeground(true)

此外,您可能应该查看onTrimMemory()onLowMemory(),它们是操作系统破坏您的服务时调用的函数。

于 2019-12-03T10:00:14.860 回答
0

只需使用

stopForeground(true)

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

于 2020-03-27T09:58:52.843 回答
-2

您很可能没有停止服务

于 2012-09-13T06:44:56.193 回答