1

我正在开发一个运行一系列异步传感器扫描的 Android 应用程序,例如获取附近蓝牙设备的 MAC 地址列表、获取手机的当前位置 (GPS) 并记录周围噪音的音频样本。每当每次扫描完成时,我都想要一个服务来处理将收集到的数据发送到 Web 服务(使用 http 和 REST)。

我面临的问题是我应该实现自己的自定义服务还是使用 IntentServce 来处理多个请求(使用“startService()”发送的意图)来上传数据,因为我希望 100% 确定最终找到的数据被发送到网络服务(如果互联网连接可用)。

如果 Android 决定终止我的 IntnetService 或用户在仍在处理它的请求工作队列时强制终止它,我会丢失待处理请求的队列吗?即我是否需要保存工作队列的状态(因此被迫自己实现服务而不使用 IntentService)?

4

1 回答 1

3

如果 Android 决定终止我的 IntnetService 或用户在仍在处理它的请求工作队列时强制终止它,我会丢失待处理请求的队列吗?

如果用户重新启动他们的设备,您的队列将会消失。否则,至少在理论上,START_REDELIVER_INTENTonStartCommand()(这是IntentService默认的 IIRC)返回应该给你任何Intent未处理的命令。

话虽如此,如果您“想 100% 确定”命令被处理,我建议您创建自己的持久工作队列(例如,数据库表)。使用IntentServicemore 作为请求来处理所有未完成的持久工作队列事件(如果有)。使用 aBOOT_COMPLETED BroadcastReceiver来处理重新启动的情况,告诉您IntentService处理由于重新启动而留下的任何未完成的命令。

于 2012-06-06T13:10:24.793 回答