从活动中停止IntentService

我有一个IntentSerivce有时在后台运行,在某些情况下它可能是一个相当长的运行过程。 我给出了一个选项,让用户退出基本上停止和轮询的应用程序,并忽略任何GCM推送通知。 但是,如果推送通知进来了, IntentService需要花费一些时间来完成它的工作(从服务器获取信息并在需要的时候向用户发送通知,比如新的消息到达等)。

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

Related of "从活动中停止IntentService"

你是否将一个新的Intent传入stopService(Intent)startService(Intent)使用的原始startService(Intent) 。 通过原意图应该停止服务。

如果没有,你可以使用Handler来传递Message的服务。 让IntentService实现Handler.Callback接口,并在Activity创build一个新的Handler(Handler.Callback) ,将IntentService作为callback传递。 然后在您的IntentService中实现onHandleMessage()来调用stopSelf() ,让您的Activity在您希望停止的时候向它传递一个消息。

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

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