我使用 S3 Multipart api 将文件上传到网络。上传是在 IntentService 中完成的。现在 api 支持恢复支持,我想允许用户暂停和恢复上传。现在的问题是当我允许用户按下暂停按钮时,我怎样才能终止 Intent 服务?我需要获取当前正在执行的 IntentService,并以某种方式调用一个函数来保存上传对象的状态并暂停或终止它。知道如何向当前正在执行的意图服务发送消息并杀死它吗?
亲切的问候
我使用 S3 Multipart api 将文件上传到网络。上传是在 IntentService 中完成的。现在 api 支持恢复支持,我想允许用户暂停和恢复上传。现在的问题是当我允许用户按下暂停按钮时,我怎样才能终止 Intent 服务?我需要获取当前正在执行的 IntentService,并以某种方式调用一个函数来保存上传对象的状态并暂停或终止它。知道如何向当前正在执行的意图服务发送消息并杀死它吗?
亲切的问候
an在方法退出IntentService
时自行停止。onHandleIntent()
这是它相对于常规服务的好处之一——您不需要管理生命周期。
来自Android 文档页面IntentService.onHandleIntent()
,
在工作线程上调用此方法并请求处理。一次只处理一个 Intent,但处理发生在独立于其他应用程序逻辑运行的工作线程上。因此,如果这段代码需要很长时间,它会阻止对同一个 IntentService 的其他请求,但不会阻止其他任何请求。处理完所有请求后,IntentService 会自行停止,因此您不应调用 stopSelf()。
至于暂停/恢复上传,您需要使用非阻塞 IO。无法中断或以其他方式停止阻塞 IO。您能做的最好的事情就是设置一些状态,告诉自己在结果完成后丢弃结果。非阻塞 IO 稍微复杂一些,超出了这里讨论的范围。这是关于该主题的一个合理的教程。如果您使用更高级别的 API(如 AWS Android API)与 S3 交互,则该 API 需要支持非阻塞 IO。
在您的情况下,您可以为每次上传保留一个数据库。当您在您的意图服务中获得结果时,您可以查询数据库以查看用户是否取消了上传。
如果您正在寻找一种强大的方式来下载支持暂停/恢复的文件,您是否查看过DownloadManager
API?