2011-09-19 89 views
0

我試圖創建一個在給定時間間隔內運行的服務。該服務的目的是更新數據庫,並在完成後通過Activity通知Intent後臺線程中的Android服務

當用戶選擇「刷新」時,服務也應該從活動中調用。

我已經完成了這個,但我無法讓它在分離的線程中運行。

該服務在一個可運行執行一個更新方法:

private Runnable refresh = new Runnable() { 
     public void run() { 
      update(); //Runs updates 
      didUpdate(); //Sends broadcast 
      handler.postDelayed(this, 50000); // 50 seconds, calls itself in 50 secs 
     } 
    }; 

我有另一個可運行稱爲ManualRefresh經由從活動的廣播調用。

但是,這些runnables似乎阻止了用戶界面。

需要諮詢! :)

+0

你如何運行Runnables? –

+0

我通過調用refresh.run() – johan

+0

來嘗試運行它,handler.post(refresh); –

回答

2

當您通過調用它的run方法運行Runnable時,它在當前線程上運行。要在後臺線程上運行,您需要使用new Thread(refresh).start();(如果要運行的Runnable是refresh)。

您也可以使用AsyncTask進行此操作,但對於活動而言,這比服務更適合。有關使用AsyncTask的信息可以在API docs和文章Painless Threading中找到。

0

我建議使用AlarmManager來編寫服務。該服務將收到一個意圖告訴它定期更新數據庫。

更新後,您可以通過意圖通知活動(如您所述)。

當用戶想要手動刷新時,讓應用程序向您發送服務意向。從AlarmManager或活動接收意圖將執行相同的代碼。

您可能還希望在手動刷新請求後重新安排警報。