android:使用AlarmManager运行后台任务

时间:2010-10-04 22:02:44

标签: android notifications broadcastreceiver alarmmanager

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

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

TIA

1 个答案:

答案 0 :(得分:31)

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

此示例使用的模式,以及我发现似乎运行良好的模式,是使用启动接收器来设置 AlarmManager (当然还要检查以开始轮询您的主活动也适用于安装了应用并且未启动系统的情况)并让 AlarmManager 为另一个发送意图接收者: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