2013-12-15 135 views
0

我想每隔幾分鐘將數據從網絡服務器解析到我的android設備。 我已經實現了一個AsyncTask,它正在OnPostExecute()方法中更新我的UI。Android中循環異步任務 - 最好的方法是什麼?

我沒有找到重複AsyncTask的好方法。我嘗試過Handlers,Threads和ExecutorServices ...我沒有設法在數據更新後重復Asynctask。有幾百個關於這個話題的話題,每個話題都有不同的結果。

我的源代碼在我的Handler嘗試重新啓動我的可運行後返回一些IllegalStateException。

12-15 21:15:36.909: E/AndroidRuntime(28256): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once) 

源(的onCreate()...):

.... 
.... 

    websitesAsyncTask = new WebsitesAsyncTask(); 
     mHandler = new Handler(); 

     refreshWebsitesRunnable = new Runnable() { 
      @Override 
      public void run() { 

       // mHandler.removeCallbacks(refreshWebsitesRunnable); 

       if (mThreadExecutor == null || mThreadExecutor.isShutdown()) { 
        mThreadExecutor = Executors.newSingleThreadExecutor(); 
       } 

       // TODO Auto-generated method stub 
       Log.d("scheduled task", 
         "---Scheduled Task: Refresh Websites"); 

       if (websitesAsyncTask.getStatus() != Status.RUNNING) { 
       // websitesAsyncTask.cancel(true); 

        websitesAsyncTask 
          .executeOnExecutor(mThreadExecutor); 
       } 

       mHandler.postDelayed(refreshWebsitesRunnable, 10000); 

      } 

     }; 

     startRepeatingTask(); 
    } 

如何重複我的任務,而不會阻塞UI也無需編寫代碼髒?

回答

2

一個AsyncTask實例只能被調用一次。要進行第二次調用,您需要創建一個新實例。

+1

太感謝你了,它的工作現在。將在接下來的幾分鐘內接受。 – Goot

0

有一種方式,你需要actualy一個的AsyncTask

doInBackground(...){ 
    while(Condition){ 
     //do your stuff 
     //... 

     Thread.sleep(5000) 
    } 

}