我有一个IntentSerivce
有时在后台运行,在某些情况下它可能是一个很长的运行过程。我为用户提供了一个退出应用程序的选项,该应用程序基本上只停止并轮询并忽略任何GCM
推送通知。但是如果推送通知进来并且IntentService
需要一段时间才能完成它所拥有的功能(从服务器获取信息并在需要时向用户发送通知,如新消息到达或某事)。
问题是,如果用户在intentservice
仍在运行时选择“退出”应用,他们仍会收到我不想要的通知。我知道服务有stopSelf()
方法,但当我知道用户通过菜单按钮“退出”应用程序时,我需要在活动中停止它。向服务发送另一个intent
不起作用,因为意图排队并在我的活动中调用context.stopService(intent);
也不起作用,所以我怎么能阻止它?
答案 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));