在android中显示来自服务的状态栏通知

时间:2011-01-29 01:53:14

标签: android binding service notifications

您好 我有一个愚蠢的问题。我试图显示来自服务的通知。当一个活动开始时,我会像这样调用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()。再次显示通知。

我做错了什么?我是否误解了通知或服务的工作原理?

2 个答案:

答案 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