我正在开发一个Android应用程序,该应用程序运行一系列异步传感器扫描,例如获取附近蓝牙设备的MAC地址列表,获取手机的当前位置(GPS)并记录周围噪音的音频样本。每当每次扫描完成时,我都希望服务处理将收集的数据发送到Web服务(使用http和REST)。
我面临的问题是我是否应该实现自己的自定义服务或使用 IntentServce 来处理多个请求(使用 'startService()' 发送的意图)来上传数据,因为我想 100% 确定找到的数据最终被发送到 Web 服务(如果互联网连接可用)。
如果 Android 决定终止我的 IntnetService,或者用户在处理其请求工作队列的同时强制终止它,我会丢失待处理请求队列吗? 即我是否需要保存工作队列的状态(因此被迫自己在不使用 IntentService 的情况下实现服务)?
如果 Android 决定终止我的 IntnetService,或者用户强制终止它,同时仍在处理它的工作请求队列,我会丢失待处理请求队列吗?
如果用户重新启动其设备,您的队列将消失。否则,至少在理论上,从onStartCommand()
(这是IntentService
默认的IIRC)返回START_REDELIVER_INTENT
应该会给你任何未处理Intent
命令。
话虽如此,如果您"想要 100% 确定"命令已处理,我建议您创建自己的持久工作队列(例如,数据库表)。使用更多IntentService
作为处理所有未完成的持久工作队列事件(如果有)的请求。使用BOOT_COMPLETED
BroadcastReceiver
来处理重新启动情况,告知IntentService
处理由于重新启动而未完成的任何命令。