2016-04-27 71 views
0

我想同時運行2個方法。但它只顯示第二種方法的輸出。你可以幫我嗎?Asynctask android

new AsyncTask<Void, Void, Bitmap>() { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

     } 
     @Override 
     protected Bitmap doInBackground(Void... params) { 

      Run1(); 
      Run2(); 

      return currentBitmap; 
     } 
     @Override 
     protected void onPostExecute(Bitmap bitmap) { 
      super.onPostExecute(bitmap); 
      if(bitmap!=null) { 

       loadImageToImageView(); 
      } 
     } 
    }.execute(); 
+0

我可以建議在單獨的線程上運行每組代碼嗎?您可以使用線程的內聯匿名實現來整體實現乾淨的實現。 –

回答

0

,始終執行對線程池的異步任務

new AsyncTask<Void, Void, Bitmap>() { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 
    @Override 
    protected Bitmap doInBackground(Void... params) { 

     Run1(); 
     Run2(); 

     return currentBitmap; 
    } 
    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     super.onPostExecute(bitmap); 
     if(bitmap!=null) { 

      loadImageToImageView(); 
     } 
    } 
}.executeOnExecutors(AsyncTask.THREAD_POOL_EXECUTOR); 

讓我知道如果它的工作原理。

+0

yourAsyncTask是什麼? RUN1()和RUN2()方法,如上述 – xiac

+0

對象的異步任務 – Pehlaj

+0

新的AsyncTask { doInBackground(){} } .executeOnExecutors(AsyncTask.THREAD_POOL_EXECUTOR)的; – Pehlaj

1

策略取決於您的任務。

不要將AsyncTask用於同時作業,因爲默認情況下它是串行執行的。

如果您不需要UI修改,那麼您的第一次嘗試可以是java線程。

您可以通過

  • Activity.runOnUiThread(Runnable接口)
  • View.post(Runnable接口)
  • View.postDelayed(Runnable接口,長)

結果傳遞給UI線程處理位圖圖像考慮使用HandlerThread

+0

我嘗試過線程,但我也使用位圖圖像,我無法在android – xiac

0

試試這個

new AsyncTask<Void, Void, Bitmap>() { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 
    @Override 
    protected Bitmap doInBackground(Void... params) { 

     Run1(); 
     Run2(); 

     return currentBitmap; 
    } 
    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     super.onPostExecute(bitmap); 
     if(bitmap!=null) { 

      loadImageToImageView(); 
     } 
    } 
}.executeOnExecutors(AsyncTask.THREAD_POOL_EXECUTOR); 
+0

中使用線程我應該更改API,它intellisenses .executeOnExecutors(AsyncTask.THREAD_POOL_EXECUTOR),但然後強調它.Field需要API級別11當前分鐘是8):android.os.AsyncTask#THREAD_POOL_EXECUTOR – xiac

+0

是的,你應該如果你想並行運行asnyc任務。 – Pehlaj

+0

@ P. Rai它的輸出只有最後一種方法。不起作用的第一種方法run1() – xiac

1

您可以使用兩個Seprate線程

// Create two threads: 

Thread thread1 = new Thread() { 
public void run() { 
    Run1(); 
} 

};

Thread thread2 = new Thread() { 
public void run() { 
    Run2(); 
} 

};

// Start the both threads. 
thread1.start(); 
thread2.start(); 

// Wait for them both to finish 
thread1.join(); 
thread2.join();