Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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 如何停止意图服务?_Android_Intentservice - Fatal编程技术网

Android 如何停止意图服务?

Android 如何停止意图服务?,android,intentservice,Android,Intentservice,我使用S3多部分api将文件上传到网络。上载是在IntentService中完成的。现在api支持恢复支持,我想允许用户暂停并恢复上传。现在的问题是,当我允许用户按下一个暂停按钮时,我如何才能终止Intent服务?因此,我需要获取当前正在执行的IntentService,并以某种方式调用其上的函数,以保存上载对象的状态并暂停或终止它。有没有想过如何向当前正在执行的intent服务发送消息并将其终止 当onHandleIntent()方法退出时,IntentService会自动停止。这是it相对于

我使用S3多部分api将文件上传到网络。上载是在IntentService中完成的。现在api支持恢复支持,我想允许用户暂停并恢复上传。现在的问题是,当我允许用户按下一个暂停按钮时,我如何才能终止Intent服务?因此,我需要获取当前正在执行的IntentService,并以某种方式调用其上的函数,以保存上载对象的状态并暂停或终止它。有没有想过如何向当前正在执行的intent服务发送消息并将其终止


onHandleIntent()方法退出时,
IntentService
会自动停止。这是it相对于常规服务的一个好处——您不需要管理生命周期

此方法在具有处理请求的工作线程上调用。 一次只处理一个意图,但处理发生在 独立于其他应用程序逻辑运行的工作线程。 因此,如果这段代码需要很长时间,它将阻塞其他请求 同样的IntentService,但它不会占用任何其他内容。什么时候 所有请求都已处理,IntentService会自动停止,因此 不应调用stopSelf()

至于暂停/恢复上传,您需要使用非阻塞IO。无法中断或停止阻止IO。你能做的最好的事情就是设定一种状态,告诉自己当结果结束时就扔掉它。非阻塞IO稍微复杂一些,超出了本文讨论的范围。这里有一个关于这个话题的。如果您使用更高级别的API(如AWS Android API)与S3交互,则该API需要支持非阻塞IO

在您的情况下,您可以为每次上载保留一个状态数据库。当您在intent服务中获得结果时,您可以查询数据库,查看用户是否取消了上载


如果您正在寻找一种强大的方法来下载支持暂停/恢复的文件,您是否查看了API?

我是否可以向正在执行的IntentService发送消息以提前退出该函数?请参阅我关于阻止IO与非阻止IO的评论。如果您使用的是阻塞IO,而您的
IntentService
正在阻塞下载文件,那么答案是否定的。最终,
IntentService
是一个单独的线程,就像任何其他线程一样,没有神奇的“kill”方法阻止它执行。是的,我看到了,但我必须上传而不是下载。谢谢。@JeffreyBlattman您如何知道IntentService是否已完成?OnDestroy够了吗?当操作系统内存不足并决定终止某些进程时会发生什么情况?当内存不再不足时,服务会自动重新启动吗?@androiddeveloper不清楚你想实现什么。有了
IntentService
,您就不在乎生命周期了。这是你不必担心的事情。如果您需要承载长时间运行的流程的服务,则应该使用常规服务。