2015-04-01 103 views
3

我知道以前的AsyncTask執行正在運行 - 我的問題是如何完成並重新執行,因爲我的參數已更改。AsyncTask無法執行任務:任務已執行

protected class ImageDownloadTask extends AsyncTask<Response, Void, Void>{ 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       poolTasks.add(this); 
      } 

      @Override 
      protected Void doInBackground(Response... params) { 
       int count=params[0].getGetPosts().getPostsCount(); 
       for(int i = 0; i < count; i++){ 
        Post post = params[0].getGetPosts().getPosts(i); 

        if(!isCancelled()){ 
         try { 

//some code to download images 
} catch (Exception e) { 


         } 
         publishProgress(); 
        } else poolTasks.remove(this); 
       } 
       return null; 
      } 

      @Override 
      protected void onProgressUpdate(Void... values) { 
       super.onProgressUpdate(values); 
       adapter.notifyDataSetChanged(); 
      } 

      @Override 
      protected void onPostExecute(Void result) { 
       super.onPostExecute(result); 
       poolTasks.remove(this); 
       adapter.notifyDataSetChanged(); 
      } 

      @Override 
      protected void onCancelled() { 
       super.onCancelled(); 
       poolTasks.remove(this); 
      } 
     } 
現在

的參數更新這就是我如何把這個任務:

 Log.d("MyLog"," imageTask.getStatus()="+imageTask.getStatus()); 
    if (imageTask.getStatus() == AsyncTask.Status.RUNNING){ 
     imageTask.cancel(true); 
    } 
    imageTask.execute(response); 

第一,部份狀態,通過日誌判斷完成。所以它如何運行?以及如何正確地重新啓動這個AsyncTask?

回答

0

從個人經驗來看,AsyncTask實例僅適用於一次執行。它不可重用。出於你的目的,你應該重新初始化它然後執行。

希望我能幫上忙。

僅供參考,請查看標題'線程規則'here

+0

我在靜態方法中使用它,所以我需要這個靜態對象。我不能只做新的ImageTask.execute(響應); - 我需要聲明它爲靜態的第一個 – user2976267 2015-04-01 16:15:24

+0

你不能使用如下的變量嗎? 'static ImageTask newInstance = new ImageTask(/ * params * /); newInstance.execute(/ * params * /);' 或 'ParentClass.staticInstance = new ImageTask(/ * params * /); ParentClass.staticInstance.execute(/ * params/*);' 請分享聲明代碼,這樣我可以更好地理解。 – SlashG 2015-04-01 16:25:11

+0

我像這樣使用它 - 它是\t protected static ImageDownloadTask imageTask;在聲明和imageTask =新的ImageDownloadTask();在onCreate(); – user2976267 2015-04-01 16:38:30