В моем самом первом проекте для Android я немного манипулирую данными, поэтому использую многопоточность.
В MainActivity я создал несколько объектов Runnable и использовал ExecutorService для запуска всех потоков. Насколько я понимаю, все потоки помещаются в очередь сообщений и выполняются по очереди. И поскольку основной поток уже находится в очереди, он будет выполнен перед запуском других потоков. Есть ли способ заставить основной поток дождаться завершения других потоков, а затем продолжить?
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//call MyFunction here
}
private List<Pair[]> myFunction(int dataInput) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(12);
MyTask MyTask = new MyTask();
for (int i = 0; i < gallerySize; ++i) {
final int index = i;
Runnable runnable = MyTask.runLongOperationWithThread(new MyTask.DataCallback(){
@Override
public void onSuccess(double[] scores) {
// get data back to main thread
}
@Override
public void onError(Exception ex) {
//TODO: log this error out to file
}
});
executorService.execute(runnable);
}
// try to get back all data from multi threading and do some operations
return returnList;
}
Помогают ли в этом случае Looper и Handler?
И, пожалуйста, поправьте меня, если у меня есть какие-то недоразумения в концепции Android и потоковой передаче.
Спасибо.
runOnUiThread
. Кроме того, обработчики могут получать сообщения, и если они работают в основном потоке Looper, сообщения будут обрабатываться в основном потоке. Итак, в основном прочтите документ: developer.android.com/training/multiple- темы / - person njzk2   schedule 12.06.2016