您好 我有一个愚蠢的问题。我试图显示来自服务的通知。当一个活动开始时,我会像这样调用startService:
Intent myIntent = new Intent(getApplicationContext(),notif_service.class);
startService(myIntent);
服务计算某些内容并应显示通知然后停止。代码如下:
if (limit_time_value == 2 && start >= 6300000 && notif_past)
{
notif_past=false;
showNotification();
stopSelf();
}
有两种方法可以停止此服务,使用stopSelf()或使用
中的按钮自行启动 Intent myIntent = new Intent(getApplicationContext(),notif_service.class);
stopService(myIntent);
问题是即使我停止服务,也会在指定时间过后显示通知。我尝试使用Binding来停止设置,而不是调用onDestroy(),我在其中取消通知并再次调用stopSelf()。再次显示通知。
我做错了什么?我是否误解了通知或服务的工作原理?
答案 0 :(得分:1)
您没有准确指出您执行上述第二个代码段中显示的工作的位置。
如果在onStart()
或onStartCommand()
中完成了这项工作,那么该工作正在主应用程序线程上执行,因此一旦启动它就会阻止所有其他主应用程序线程工作,例如stopService()
和onDestroy()
。
如果正在您创建的后台线程上完成该工作,除非您终止该后台线程,否则该线程将继续完成,无论该服务是否被销毁。您需要自行安排终止该帖子。
答案 1 :(得分:1)
调用您在showNotification()
函数内调用的NotificationManager类的实例。
例如,我使用过:
NotificationManager nm=(NotificationManager)this.getSystemService(this.NOTIFICATION_SERVICE);
nm.notify(1,builder.build());
如果您已经做了类似的事情来创建通知,请使用相同的实例通过调用cancel()
函数并传递notificationId
(在这种情况下为1)来取消它。
例如:
nm.cancel(1);
此处1表示您在创建时提供的notificationID
。