在 Android 中在此服务中上传数据的最佳服务启动类型是啥

Posted

技术标签:

【中文标题】在 Android 中在此服务中上传数据的最佳服务启动类型是啥【英文标题】:What the best Service launch type to upload data in this service in Android在 Android 中在此服务中上传数据的最佳服务启动类型是什么 【发布时间】:2018-09-20 18:24:43 【问题描述】:

我需要将数据上传到Service 中的服务器吗? 众所周知,android 系统会在内存不足的情况下终止进程。 并且任何时候我的服务都可以被杀死,直到上传没有完成? 如何避免这个麻烦? 上传完成后我想打电话给stopSelf()。 我必须使用什么常量来避免这种情况?

https://developer.android.com/reference/android/app/Service#START_CONTINUATION_MASK

【问题讨论】:

【参考方案1】:

如何避免这个麻烦?我想在上传时调用 stopSelf() 完成的。我必须使用什么常量来避免这种情况?

您可以使用IntentService,任务完成后会自动关机。

众所周知,Android 系统会在内存不足的情况下终止进程。和任何 在上传未完成之前我的服务可以被终止的时间?

您可以使用startForeground服务作为

已启动的服务可以使用 startForeground(int, Notification) API 将服务置于前台状态,系统认为 它是user is actively aware of and thus not a candidate for killing when low on memory.

对于

我必须使用什么常量来避免这种情况?

使用

START_STICKY : 杀死后重启服务(重启时意图为空)

START_REDELIVER_INTENT : 一旦被杀死就重新启动服务并获得第一次收到的相同意图

注意:很少有设备不遵循START_STICKY 和类似说明。

参考:

How to automatically restart a service even if user force close it?

【讨论】:

你的意思是 startForegroundService() 吗? 是的,这是针对这种情况的推荐解决方案,否则,您可以使用意图服务并覆盖 onlowmemory,如果您可以通过将 null 设置为引用来释放一些内存 这个解决方案有点麻烦 - min api = 26 哪种解决方案? startforegorund 可从 API 5 使用 startForeground (int id, Notification notification) 和低内存也来自 API 1

以上是关于在 Android 中在此服务中上传数据的最佳服务启动类型是啥的主要内容,如果未能解决你的问题,请参考以下文章

将图像上传到服务器android

将 1000 多条记录上传到还包含来自 iOS/Android 应用程序的每条记录的图像的服务器的最佳方法是啥?

android批量文件上传(android批量图片上传)

在回调中在firebase上上传两个文件但无法获取两个文件的getDownloadUrl

负载均衡服务器的文件上传最佳解决方案

android批量文件上传(android批量图片上传)