![](/img/trans.png)
[英]AlarmManager & BroadcastReceiver did not execute or in wrong interval times
[英]AlarmManager not calling BroadcastReceiver precisely every interval
我有以下BroadcastReceiver
:
public class LocationUpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LocationHelper locationHelper = new LocationHelper(context);
locationHelper.updateLocation();
//.. do stuff with location
}
public static void SetAlarm(Context context, Long time){
Intent intentAlarm = new Intent(context, LocationUpdateReceiver.class);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(context, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), time, pi);
}
public static void CancelAlarm(Context context) {
Intent intent = new Intent(context, LocationUpdateReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
我這樣調用setAlarm方法以從Activity中進行測試:LocationUpdateReceiver.SetAlarm(this,3000L);
您會注意到我調用了setRepeating()
,我以為應該每3秒調用一次接收器類?
麻煩在於,通常情況下,它在超過5分鍾的時間內不會打電話給接收方,這是一個很大的偏差。 我打算每30分鍾運行一次接收器,但是我應該期望偏差時間有一個相對的百分比嗎?
如何確保將其准確地(或以很小的偏差)調用到指定的間隔?
從setRepeating()的文檔中:
注意:從API 19開始,所有重復警報都是不精確的。 如果您的應用程序需要精確的交付時間,則它必須使用一次性精確警報,並如上所述每次重新安排。 targetSdkVersion早於API 19的舊版應用程序將繼續將其所有警報(包括重復警報)視為精確警報。
您可以使用setExact()並自行設置間隔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.