当Android系统销毁服务时删除通知

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);
}

问题: 当我的服务被安卓操作系统销毁时(在onDestroy()未被调用的情况下),通知没有被移除。那么当服务被安卓操作系统销毁时,如何移除通知?

5个回答

1

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

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

这也并不总是有效。onDestroy可能会被Android跳过。 - quealegriamasalegre

0

只需使用

stopForeground(true)

当你的工作完成时,它将销毁前台通知。


0

无论何时需要停止服务,您都应使用此功能。这将关闭您的通知并结束服务。

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

0

你尝试过notificationManager.cancelAll()吗?

如果你的目标是API 24+,可以使用stopForeground(Service.STOP_FOREGROUND_REMOVE)或者stopForeground(true)

另外你可能需要了解onTrimMemory()onLowMemory(),它们是在操作系统销毁你的服务时调用的函数。


-2

很可能你没有停止你的服务


我正在停止服务,这在这种情况下运作良好。但是当我的服务被Android操作系统销毁(可能是由于低内存或其他原因),那么如何删除通知? - user1041858
@user1041858 为什么你认为在这种情况下onDestroy不会被调用? - Alexander Kulyakhtin
当安卓系统自动销毁服务时,我遇到了这个问题。 - user1041858
@user1041858 文档中说在这种情况下会调用onDestroy。不过我从来没有验证过。 - Alexander Kulyakhtin
但是在这种情况下,onDestroy() 不会立即被调用(可能会在一段时间后被调用),因此通知不会被删除。 - user1041858

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接