2013-04-22 83 views
17

我需要構建一個每10/15分鐘運行一次的後臺任務(無關緊要,或者很好),即使應用程序是沒有運行。Android - 每15分鐘運行一次後臺任務,即使應用程序沒有運行

我該如何做到這一點?我似乎無法繞過這個包裹。

我讀過我可以使用某種runnable()功能或使用後臺服務或AlarmManager。我正在考慮後臺服務,因爲它也必須在應用程序本身沒有運行時完成。

什麼是更好的方式做到這一點,我怎麼能做到這一點?

回答

22

你已經確定了執行代碼片段的時間量(時間間隔),它更好地使用AlarmManager,因爲它更節能。如果你的應用需要聽某種事件,那麼服務就是你需要的。

public static void registerAlarm(Context context) { 
    Intent i = new Intent(context, YOURBROADCASTRECIEVER.class); 

    PendingIntent sender = PendingIntent.getBroadcast(context,REQUEST_CODE, i, 0); 

    // We want the alarm to go off 3 seconds from now. 
    long firstTime = SystemClock.elapsedRealtime(); 
    firstTime += 3 * 1000;//start 3 seconds after first register. 

    // Schedule the alarm! 
    AlarmManager am = (AlarmManager) context 
      .getSystemService(ALARM_SERVICE); 
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 
      600000, sender);//10min interval 

} 
+1

但是,即使應用程序本身沒有運行,這是否允許我執行代碼? – DijkeMark 2013-04-22 19:30:24

+2

是的。報警管理器就像,你(應用程序)告訴操作系統你想在X毫秒後做一些事情。然後系統在BroadcastReciever.onRecieve()中執行該代碼,該代碼是您希望在x毫秒後在後臺執行的代碼。 – wtsang02 2013-04-22 19:32:22

+0

它的工作,真的很不錯,但是,停止服務呢? am.cancel()?或..謝謝@ wtsang02 – 2015-05-19 16:05:30

2

報警管理器(系統服務)與遠程服務與內部警報實現(單獨的過程)?

報警管理是你的選擇,因爲它已經擁有你需要什麼,你只需要設置鬧鐘間隔

相關問題