2016-04-27 3 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

Всегда выполнять свои задачи асинхронное на бассейн Thread

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 для одновременных заданий, потому что по умолчанию он выполняется серийно.

Ваша первая попытка может быть java Threads, если вам не нужна модификация пользовательского интерфейса.

Вы можете оставить результаты UI нить от

  • Activity.runOnUiThread (Runnable)
  • View.post (Runnable)
  • View.postDelayed (Runnable, долгое)

Для обработки растрового изображения рекомендуется использовать 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), но затем подчеркнет его. Для заполнения требуется уровень API 11 (current min is 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(); 
Смежные вопросы