意向服务工作队列状态



我正在开发一个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处理由于重新启动而未完成的任何命令。

最新更新