我正在开发一个运行一系列异步传感器扫描的 Android 应用程序,例如获取附近蓝牙设备的 MAC 地址列表、获取手机的当前位置 (GPS) 以及记录周围噪音的音频样本。 每当每次扫描完成时,我都希望有一个服务来处理将收集到的数据发送到网络服务(使用 http 和 REST)。
我面临的问题是我是应该实现自己的自定义服务还是使用 IntentServce 来处理多个请求(使用“startService()”发送的 Intent )以上传数据,因为我想 100% 确定找到的数据最终会发送到网络服务(如果互联网连接可用)。
如果 Android 决定终止我的 IntnetService 或用户强制终止它,同时仍在处理它的请求工作队列,我会丢失待处理请求队列吗? IE。我是否需要保存工作队列的状态(因此被迫在不使用 IntentService 的情况下自己实现服务)?
最佳答案
If Android decides to kill my IntnetService or the user force-kills it while still processing it's work queue of requests, will I lose the queue of pending requests?
如果用户重新启动他们的设备,您的队列将会消失。否则,至少在理论上,从 onStartCommand()
(这是 IntentService
默认 IIRC)返回 START_REDELIVER_INTENT
应该会给你任何 Intent
未处理的命令。
也就是说,如果您“想 100% 确定”命令已被处理,我建议您创建自己的持久工作队列(例如,数据库表)。使用 IntentService
more 作为处理所有未完成的持久工作队列事件(如果有)的请求。使用 BOOT_COMPLETED
BroadcastReceiver
处理重启情况,告诉您的 IntentService
处理任何因重启而未完成的命令。
关于android - IntentService 工作队列状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10914681/