2013-04-27 83 views
3

我想創建一個類的實例(它延伸Asynctask)並在每5分鐘後調用​​方法。爲此,我嘗試在onPostExecute()方法中調用Thread.sleep(5*60*1000)),然後創建該類的新實例。代碼如下。在5分鐘的間隔後遞歸地啓動AsyncTask

public class MyAsyncTask extends AsyncTask<String, Void, String> 
{ 
    protected String doInBackground(String... arg0) { 
     //whatever I want to do 
    } 

    protected void onPostExecute(String result) { 
     Thread.sleep(5*60*1000); 
     new MyAsyncTask().execute("my String"); 
    } 
} 

但是使用此代碼阻止用戶界面5分鐘。我在某處讀到onPostExecute()中的代碼是在UI線程中執行的。這解釋了爲什麼UI被阻止。 但是,如何在不阻止UI的情況下創建AsyncTask的新實例?

有什麼建議嗎? 謝謝。

回答

10

在onPostExecute中使用此代碼。

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      new MyAsyncTask().execute("my String"); 
     } 
    }, 5*60*1000); 
2

使用此代碼

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
public void run() { 
     new MyAsyncTask().execute("my String"); 
} 
}, 0, 5*60*1000); 
1

的方法有很多重複的任務,但很多實驗後,我發現,運行的常規任務,而無需實際運行應該是通過AlarmManager活動。所有其他技術都適用於需要運行UI的應用程序。處理程序運行良好@薩加爾的反應很好。

退房example of alarm manager,你想作爲背景運行/沒有UI。

+0

請注意,它是一個讓AlarmManager工作的痛苦,上面的鏈接來自生產工作代碼。 – Siddharth 2013-04-27 17:31:01

相關問題