2012-09-22 24 views
2

我有一個服務中的AsyncTask獲取RSS提要並將它們存儲在SQLiteDatabase中。該服務從主Activity啓動。我需要每隔4個小時左右執行一次AsyncTask來執行RSS提要。我嘗試使用下面的TimerTask,但這似乎並沒有工作。後臺任務只運行一次。關於如何最好地實施這種情況/任何替代方案的任何想法?Android:如何計劃後臺服務重複運行

public class FeedReader extends Service{ 

    private void getFeedsRegularly() { 
     timer.scheduleAtFixedRate(new TimerTask() { 

     @Override 
     public void run() { 
     handler.post(new Runnable() { 

     @Override 
     public void run() { 
      new BgTask().execute(feedURL); 

     } 
      }); 
      } 
    }, 0, UPDATE_INTERVAL); 
    } 

    private class BgTask extends AsyncTask<...> 
    {...} 
} 

回答

2

對於這樣的設定時間表,您應該使用AlarmManager。您可以使用它將您的應用設置爲每4小時運行一次。

這不僅方便,而且還會提高電池性能,因爲您的應用程序不會在後臺連續運行,只需每隔四個小時製作一次AsyncTask即可。相反,Android會在適當的時機運行您的應用程序,並且您可以完成您的工作,然後等待鬧鐘再次關閉。

+0

謝謝拉格哈夫會嘗試一下。還有一件事,如果我的FeedReader類在這種情況下擴展了「Service」或「IntentService」,它會有什麼不同嗎?任何一種方法的優點? – user1650281

+0

我對Service和IntentService不太熟悉,但我認爲IntentService在這種情況下會更好,因爲它專門用於與Intents一起使用。 –