Mr_*_*s_D 5 boot android alarmmanager
我正在构建一个应用程序,它将定期监视电池状态,wifi连接和位置数据,并将结果写入文件(然后将其发送到服务器).在安装应用程序时,应禁用监视 - 但启用它的用户应在重新启动后继续运行.经过大量阅读后,我意识到我基本上有两种选择:
Service并从我的活动中解雇它.将它设置在前景,STICKY和什么不是,并希望它不被android杀死 - 并注意如果android重新创建它(实际上应该有3个服务,因此它们之间的同步可能是凌乱的).在服务中启动一个线程(我猜不需要Executors)并拥有它Thread.sleep(REGULAR_INTERVAL).唤醒,收集数据将它们写入文件.广播收集的信息并将其显示在我的活动中(如果它正好在运行(将注册广播接收器)).冲洗并重复while(true).有办法打断这个我想我必须在两种情况下注册启动接收器以检查共享首选项(已经完成此操作),并且在情况1启动服务的情况下,在案例2中为注册事件注册接收器并设置警报管理器 - 这是我需要一些骨架代码的部分.
所以 - 在我开始构建之前 - 这将是首选方法?
在概述中 - 应用程序应监视某些手机属性并将其写入文件,直到用户选择将其关闭.
而在案例2中,为报警事件注册接收器并设置报警管理器
您的接收器已经通过清单注册.
哪个是首选方法?
AlarmManager,假设REGULAR_INTERVAL通常相当长(例如,几分钟).理想情况下,该间隔是用户可配置的.
如果您打算在设备处于睡眠状态时执行此操作,则您的选项#1将无法正常工作,除非您WakeLock始终保持打开状态,这将导致您的用户想要用霰弹枪向您射击.
这种方法的一些框架代码将受到欢迎.
这是一个示例应用程序,演示AlarmManager非_WAKEUP警报的使用(即,您只需要在设备因其他原因已唤醒时发生这些事件).
下面是一个示例应用程序演示使用AlarmManager了_WAKEUP警报,用我的WakefulIntentService.WakefulIntentService(或类似的东西),因为需要AlarmManager不守设备清醒很长(只是足够长onReceive()的BroadcastReceiver),所以你需要采取额外的步骤,以保持清醒设备足够长的时间给你做你的工作.从理论上讲,你的工作可能足够快,只需要做onReceive()一个BroadcastReceiver,避免需要弄乱WakefulIntentService.但是,您将每次执行磁盘I/O,理想情况下,不应在主应用程序线程上onReceive()进行调用.而且,当你去上传你的数据时,你可能还需要一个WakefulIntentService,无论如何,如果你想在后台也这样做的话.
| 归档时间: |
|
| 查看次数: |
10471 次 |
| 最近记录: |