2012-08-24 41 views
7

我有一个IntentSerivce有时会在后台运行,在某些情况下它可能是一个相当长的运行过程。我给出了一个选项,用户可以退出基本上只停止和轮询并忽略任何GCM推送通知的应用程序。但是,如果推送通知进来,并且IntentService需要一段时间才能完成它所需的操作(从服务器获取信息并在需要时向用户发送通知,如收到新消息或其他内容)。从活动中停止IntentService

这是一个问题,如果用户在intentservice仍在运行时选择“退出”应用程序,他们仍然会收到我不想要的通知。我知道服务有stopSelf()方法,但当我知道用户通过菜单按钮“退出”应用程序时,我需要在活动中停止它。发送另一个intent到服务不起作用,因为意图排队,并在我的活动中调用context.stopService(intent);不起作用,所以我怎么能阻止它呢?

+0

[强制的IntentService立即停止]的可能的复制(http://stackoverflow.com/questions/11258083/forcing- AN-intentservice到停马上) –

回答

7

您是否将新的Intent转换为stopService(Intent)startService(Intent)中使用的原始转换器。传递原始意图应该停止服务。

如果您未能通过Handler将服务传递给Message。有IntentService实现Handler.Callback接口,并创建一个新的Handler(Handler.Callback)Activity,通过你的IntentService回调。然后实现onHandleMessage()在IntentService打电话stopSelf(),有你的Activity传递消息给它时,你想让它停下来。

+1

你在哪里从服务实例(我指的是Handler.Callback实例)时得到的活动从通知开始了吗? – LiMar

3

下面的代码工作完全正常,我从活动停止IntentService:

stopService(new Intent(getApplicationContext(), MyIntentService.class)); 
+0

非常感谢!它的工作完美的我! – CodeDoctorJL