如何停止意向服务?

时间:2012-08-30 15:11:25

标签: android intentservice

我使用S3 Multipart api将文件上传到网络。上传是在IntentService中完成的。现在api支持恢复支持,我想允许用户暂停和恢复上传。现在的问题是,当我允许用户按下暂停按钮时,我该如何杀死意图服务?哇,我需要获取当前正在执行的IntentService,并以某种方式调用一个函数来保存上传对象的状态并暂停或终止它。任何idead如何我可以发送消息到当前正在执行的意图服务并杀死它?

亲切的问候

1 个答案:

答案 0 :(得分:1)

IntentService方法退出时,onHandleIntent()会自动停止。这是常规服务的好处之一 - 您无需管理生命周期。

来自Android Documentation page for IntentService.onHandleIntent()

  

在工作线程上调用此方法并处理请求。   一次只处理一个Intent,但处理正在进行   独立于其他应用程序逻辑运行的工作线程。   因此,如果此代码需要很长时间,它将阻止其他请求   相同的IntentService,但它不会阻止其他任何东西。什么时候   所有请求都已处理完毕,IntentService自行停止,所以你   不应该调用stopSelf()。

就暂停/恢复上传而言,您需要使用非阻塞IO。没有办法打断或以其他方式阻止IO。你可以做的最好的事情是设置一些状态告诉自己在结束时丢掉结果。非阻塞IO有点复杂,超出了可以在这里讨论的范围。这是关于该主题的一个reasonable tutorial。如果您使用更高级别的API(如AWS Android API)与S3进行交互,则该API需要支持非阻塞IO。

在您的情况下,您可以为每次上传保持州数据库。当您在意图服务中获得结果时,您可以查询数据库以查看用户是否取消了上传。

如果您正在寻找一种强大的方式来下载具有暂停/恢复支持的文件,您是否看过DownloadManager API?