从活动中停止IntentService

时间:2012-08-24 16:11:20

标签: android intentservice

我有一个IntentSerivce有时在后台运行,在某些情况下它可能是一个很长的运行过程。我为用户提供了一个退出应用程序的选项,该应用程序基本上只停止并轮询并忽略任何GCM推送通知。但是如果推送通知进来并且IntentService需要一段时间才能完成它所拥有的功能(从服务器获取信息并在需要时向用户发送通知,如新消息到达或某事)。

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

2 个答案:

答案 0 :(得分:7)

您是将新Intent传递给stopService(Intent)还是startService(Intent)中使用的原始Handler。传递原始Intent应该停止服务。

如果不能使用Message来传递服务IntentService。让Handler.Callback实施Handler(Handler.Callback)界面并在Activity中创建新的IntentService,并将onHandleMessage()作为回调传递。然后在您的IntentService中实施stopSelf()以致电Activity并让您的{{1}}在您希望停止时向其传递消息。

答案 1 :(得分:3)

下面的代码非常适合我从Activity停止IntentService:

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