2014-03-19 71 views
0

我需要我的應用程序每x分鐘執行一次方法。但是,x每次可能會有所不同:根據其他因素,它可以在15和60之間變化。重複任務每次不同的分鐘數

即使用戶關閉了應用程序,或者即使用戶重新啓動了手機,也必須執行此方法。

我想與AlarmManager,但我不知道是否是我的情況最好的方法。 是嗎?或者是AlarmManager是資源消耗方式?

+0

如果你想要一個真正有用的答案,你需要更多的細節,但聽起來像'AlarmManager'會是理想的。 – kabuko

+0

AlarmManager沒問題,還有一個BOOT_COMPLETED接收器可以在電話重新啓動時重新安排鬧鐘。 – 323go

回答

0

首先創建一個IntentService並覆蓋onHandleIntent:

@Override 
protected void onHandleIntent(Intent intent) { 
    updateLocationInBackground(); // or whatever task you need to do every x minutes 
    scheduleNextUpdate(); 
} 

這個方法簡單地做到這一點:

private void scheduleNextUpdate() { 
    new Scheduler().start(); 
} 

調度線程應該是這樣的:

private class Scheduler extends Thread { 
    @Override 
    public void run() { 
      Intent i = new Intent(UserLocationUpdaterService.this, UserLocationUpdaterService.this.getClass()); 
      PendingIntent pendingIntent = PendingIntent.getService(UserLocationUpdaterService.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

      long currentTime = System.currentTimeMillis(); 

     /* Replace this part with your computation as to when the next trigger should happen. Mine is set to fire off every 5 minutes.*/ 
      long nextUpdateTimeMillis = currentTime + (5 * DateUtils.MINUTE_IN_MILLIS); 

      AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, nextUpdateTimeMillis, pendingIntent); 
     } 
    } 

消防關閉此意向在主Activity上或者在某個具有的BroadcastReceiver上使用startService() BOOT_COMPLETED註冊,或兩者兼而有之。

+0

UserLocationUpdaterService是實現IntentService的類,是不是?我收到錯誤:'方法getSystemService(String)對於類型調度程序'未定義「 – user2132478

+0

調度程序類也應作爲內部類在IntentService中定義。當它調用getSystemService時,它實際上調用了intentService.getSystemService。 – josephus

+0

創建Scheduler類的解釋是什麼,而不是在scheduleNextUpdate()方法的run()方法內寫入所有代碼? – user2132478