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