我正在開發一個應每60秒執行一次特定任務的應用程序。由於Android 4.4+中的報警存在一些準確性問題,在所有報警都不準確的情況下,我選擇了鏈接模式:A BroadcastReceiver
觸發第一個報警,每個報警依次設置下一個報警。Android設置()和setExact()報警以不正確的時間間隔觸發
問題是,即使我以60秒(60000毫秒)的間隔設置警報,警報以5秒爲間隔觸發,有時甚至更少。我測試了我的Nexus 5(Android 5.1.1)和Android 5.0.1模擬器上的代碼,兩者都給出了相同的結果。 我應該指出兩個接收器都在AndroidManifest上註冊,我的應用程序具有RECEIVE_BOOT_COMPLETED權限。
編輯:setExact()導致完全相同的問題
StartupReceiver.java(廣播接收器用於BOOT_COMPLETED):
public class StartupReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Got the BOOT_COMPLETED signal");
// Get the first alarm to be invoked immediately
AlarmReceiver.setNextScanAlarm(context, 0);
}
}
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Start the service
Intent startServiceIntent = new Intent(context, BackgroundService.class);
startServiceIntent.putExtra("interval", 60000);
startServiceIntent.putExtra("action", "scan");
context.startService(startServiceIntent);
// Schedule the next alarm
setNextScanAlarm(context, 60000);
}
public static void setNextScanAlarm(Context context, int interval) {
Intent scanIntent = new Intent(context, AlarmReceiver.class);
scanIntent.putExtra("interval", interval);
scanIntent.putExtra("action", "scan");
PendingIntent pendingIntent = PendingIntent.getBroadcast(
context,
0,
scanIntent,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
interval,
pendingIntent);
}
}
有什麼事情是問題嗎?
只是一個簡單的問題,你實際上是在做什麼與警報或只是試圖在後臺或主界面每60秒運行一些代碼? – napkinsterror