android - IntentService 工作队列状态

标签 android service android-lifecycle intentservice

我正在开发一个运行一系列异步传感器扫描的 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/

相关文章:

android - 该类型的方法 getResources() 和上下文未定义

java - 如何自定义解析推送通知以在 Android 应用程序中发送 uri?

android - 设备解锁时的应用程序回调

android - 如何使用 onResume()?

android - 如何强制最大 CPU 使用率

linux - 停止 postgresql 在 ubuntu 启动时启动

android - 取回服务中的按键

haskell - Haskell 中的 Web 服务框架

android - 停止未恢复的 Activity - Android

java - 无法将数据从 Activity C 通过 Activity B 移动到 Activity A