后台上传大文件(应用关闭时服务重启)

Posted

技术标签:

【中文标题】后台上传大文件(应用关闭时服务重启)【英文标题】:Upload large file in background (service restarting when the app closed) 【发布时间】:2014-01-20 10:01:08 【问题描述】:

我想上传大文件(~10 - 100Mb wifi 或移动网络),但在后台,因为用户可能会离开应用程序,然后系统会关闭应用程序(如果不是 enoguh 内存)我创建了一个为这种情况提供服务,但我的问题是,当我终止应用程序时,服务重新启动并重新开始上传。我发现同样的问题没有解决方案:

keeping background service alive after user exit app

My service is restarted each time the application is closed

所以它不起作用,但解决方案是什么? youtube 应用怎么样???

【问题讨论】:

您无法强制要求继续运行,但您可以实施一种方法来在您的应用被终止后恢复上传。 【参考方案1】:

如果您担心服务被杀死的可能性,您应该通过startForeground() 方法使用前台服务。

来自Service Lifecycle Docs:

已启动的服务可以使用 startForeground(int, Notification) API 将服务置于前台状态,系统认为它是用户主动意识到的,因此在内存不足时不适合杀死. (理论上,在当前前台应用程序的极端内存压力下,服务仍然可能被杀死,但实际上这不应该是一个问题。)

【讨论】:

这将处理大多数正常情况,但也会记住服务可能会消失的其他情况,例如设备关闭时。如果您的应用也能从中恢复,那就太好了。【参考方案2】:

您可以控制服务器吗?这看起来就像:

Uploading big files over HTTP

谷歌搜索提出了 Gears 项目的提案:

https://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal

如果您可以使用允许远程 PUT 的服务器/插件/模块,那是您最好的选择,否则您可能必须自己滚动“分块”...根据您的工具和知识,这可能无论如何都是最佳选择,您可以对其进行调整以针对您的特定移动条件进行优化。

【讨论】:

这里的问题是如何在android端处理这个问题..说你想上传一个非常大的文件到S3..

以上是关于后台上传大文件(应用关闭时服务重启)的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 上传带有进度的大文件并在应用重启时显示进度

怎么在不重启tomcat服务器的情况下更新修改过的后台代码

java大文件分片上传插件

iPhone重启时运行应用程序? [复制]

jsp解决大文件断点续传

如何保证 docker 后台进程重启,而不引起容器关闭