我正在构建一个应用程序,它将定期监视电池状态,wifi连接和位置数据,并将结果写入文件(并稍后将它们发送到服务器)。应该禁用安装应用程序监视 - 但启用它的用户应该在重新启动后继续。大量的阅读后,我已经意识到我已经基本2个选择:Android设计:背景长时间运行服务或AlarmManager?
- 子类
Service
和我的活动火它关闭。将它设置在前景,STICKY和什么不是,并希望它不会被android杀死 - 并注意如果android重新创建它(实际上应该有3个服务,因此它们之间的同步可能会混乱)。在服务中启动一个线程(无需执行程序,我猜),并有Thread.sleep(REGULAR_INTERVAL)
。唤醒,收集数据写入文件。广播收集到的信息并将其显示在我的活动中(如果它恰好在运行)(它将注册一个广播接收器)。冲洗并重复while(true)
。有办法打断这个 - 我的活动有注册一个PendingIntent与AlarmManager - 这将运行每个REGULAR_INTERVAL。我还没有深入研究过这种方法的技术细节 - 但我希望我能够让这个PendingIntent创建并运行一个IntentService(这似乎是一条可行的路线 - 让Thread机制免费以及关闭在其自己的)。这种方法的一些骨架代码将受到欢迎。
我想我必须注册在这两种情况下启动接收器检查共享偏好(已经做到了这一点),并在情况1启动服务(S),而在情况2寄存器的报警事件的接收器并设置警报管理器 - 这是我需要一些骨架代码的部分。
所以 - 在我开始构建之前 - 这将是首选方法?
在回顾 - 应用程序应该监视一些手机属性,并将它们写入文件,直到用户选择关闭它。
你的用户或许会杀了你,如果你保持一个'Service'活着连续排水他们的手机电池只是聚集在一定的时间间隔圆顶数据。如果需要,可以使用第二种方法,带有带额外WakeLocks的'IntentService'(查看CommonsWare的'WakefullIntentService')。 – Luksprog 2013-03-16 16:06:12
@Luksprog:谢谢 - 我需要锁吗?在接收报警的广播接收机中(仍在研究如何实现)? – 2013-03-16 16:10:44
为什么是反面投票? – 2013-03-16 21:11:18