Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从活动停止IntentService_Android_Intentservice - Fatal编程技术网

Android 从活动停止IntentService

Android 从活动停止IntentService,android,intentservice,Android,Intentservice,我有一个intentservice,有时在后台运行,在某些情况下,它可能是一个相当长的运行过程。我为用户提供了一个退出应用程序的选项,它基本上只是停止和轮询,并忽略任何GCMpush通知。但是,如果传入推送通知,并且IntentService需要一段时间才能完成它必须完成的工作(从服务器获取信息,并在需要时向用户发送通知,如收到新消息或其他信息) 问题是,如果用户在intentservice仍在运行时选择“退出”应用程序,他们仍会收到我不想要的通知。我知道服务有stopSelf()方法,但当我知

我有一个
intentservice
,有时在后台运行,在某些情况下,它可能是一个相当长的运行过程。我为用户提供了一个退出应用程序的选项,它基本上只是停止和轮询,并忽略任何
GCM
push通知。但是,如果传入推送通知,并且
IntentService
需要一段时间才能完成它必须完成的工作(从服务器获取信息,并在需要时向用户发送通知,如收到新消息或其他信息)


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

您是将新的
意图
传递到
停止服务(意图)
中,还是传递在
开始服务(意图)
中使用的原始意图。通过原始意图应停止服务


如果失败,您可以使用
处理程序
向服务传递
消息
。让
IntentService
实现
Handler.Callback
接口,并在
活动中创建一个新的
Handler(Handler.Callback)
,将
IntentService
作为回调传递。然后在您的IntentService中实现
onHandleMessage()
,调用
stopSelf()
,并让您的
活动在需要停止时向其传递消息

下面的代码对于我停止IntentService的活动非常有效:

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

在从通知开始的活动中,您从服务实例(我指的是Handler.Callback实例)中得到了什么?可能重复