android:使用AlarmManager运行后台任务

mtm*_*ock 11 notifications android broadcastreceiver alarmmanager

我正在编写一个应用程序,需要定期检查服务器是否有新消息并通知用户.我已经看到一些使用AlarmManager来点击BroadcastReciever的例子,这似乎是正确的事情,但我似乎无法让它工作.

任何人都可以向我展示这种事情的一步一步的教程(重复警报触发某种启动通知的背景代码)?

TIA

Cha*_*ins 31

这是一个完整的例子:http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/

这个例子使用的模式,以及我发现似乎运行良好的模式,是使用启动接收器来设置AlarmManager(当然也检查从主Activity开始轮询,对于你的情况应用程序已安装且系统未启动)并让AlarmManager向另一个接收器发送Intent:http://android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip /dealdroid/DealBootReceiver.java

然后从AlarmReceiver启动一个IntentService:http: //android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealAlarmReceiver.java

从您的IntentService然后进行网络调用以轮询数据,或者您需要做什么.IntentService自动将您的工作放在后台线程中,非常方便:http: //android-in-practice.googlecode.com/svn/trunk/ch02/DealDroidWithService/src/com/manning/aip/dealdroid/DealService.java

检查这些类的文档,很多都在那里.

这个例子的警告是它没有处理唤醒锁定间隙(如果你需要它,优秀的CommonsWare代码会这样做),但是它可能会给你一些关于如何使用AlarmManager和服务进行"轮询"的更多想法.东西.

更新:代码现在在这里:https://github.com/charlieCollins/android-in-practice

  • 您可能希望在IntentService上放置一个WakeLock,以确保手机在执行onReceive后不会直接进入睡眠状态.抓一点,只是看你的警告...... (2认同)