我的应用需要每小时执行一次特定任务。应用程序运行,暂停甚至关闭都无关紧要。
当app正在运行或暂停时,我可以通过安排AlarmManager broadcastreceiver来实现。但是当应用程序关闭时,我必须调用" unregisterReceiver"不泄漏意图,应用程序将永远不会被唤醒(或某事)来处理任务。
然后,问题是:如何安排我不需要取消注册的警报管理员任务,因此即使我的申请被关闭也会被调用?
答案 0 :(得分:3)
使用AlarmManager.setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
。将类型设置为AlarmManager.RTC_WAKEUP
以确保设备在睡眠时被唤醒(如果这是您的要求)。
这样的事情:
Intent intent = new Intent("com.foo.android.MY_TIMER");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
long now = System.currentTimeMillis();
long interval = 60 * 60 * 1000; // 1 hour
manager.setRepeating(AlarmManager.RTC_WAKEUP, now + interval, interval,
pendingIntent); // Schedule timer for one hour from now and every hour after that
您将PendingIntent传递给此方法。您无需担心泄漏意图。
请记住,当您不再需要时,请致电AlarmManager.cancel()
来关闭闹钟。
请勿在代码中注册Receiver。只需将<intent-filter>
标记添加到BroadcastReceiver的清单条目中,如下所示:
<receiver android:name=".MyReceiver">
<intent-filter>
<action
android:name="com.foo.android.MY_TIMER"/>
</intent-filter>
</receiver>
答案 1 :(得分:0)
您需要为此设置一个名为Service
的Android组件。从服务代码中,您可以使用带有PendingIntent Class的AlarmManager每小时安排任务。当您的AlarmManger在服务组件中声明时,它不需要任何GUI,并且将在后台执行,直到您的设备中有电池为止。