嗯,這是一個邏輯順序和併發性的問題。試試這個方法:
public void process() {
Thread funcAThread = new Thread(new Runnable() {
@Override
public void run() {
startFunctionA();
}
});
Thread funcBThread = new Thread(new Runnable() {
@Override
public void run() {
startFunctionB();
}
});
try {
funcAThread.start();
funcBThread.start();
funcAThread.join();
funcBThread.join();
startFunctionC();
startFunctionD();
} catch (InterruptedException e) {
Log.getStackTraceString(e);
}
}
注:確保到UI意見(尤其是在功能d)所有的呼叫使用Activity.runOnUiThread(Runnable runnable)
的UI線程內部處理。
注意2:如果functionC很費時,也可以從線程調用它,以便它保持您的應用程序響應(這非常重要)。因此,基於以上我的代碼:
try {
funcAThread.start();
funcBThread.start();
funcAThread.join();
funcBThread.join();
new Thread(new Runnable() {
@Override
public void run() {
startFunctionC();
//once completed, call UI thread for D !
runOnUiThread(new Runnable() {
@Override
public void run() {
startFunctionD();
}
});
}
}).start();
} catch (InterruptedException e) {
Log.getStackTraceString(e);
}
注3:我不會推薦的AsyncTask
使用。不是因爲它是不好的(當然不是),而是因爲它們是用於操作,你需要定義一個開始,要在背景與UI線程上執行定期更新最後一些其他處理的長時間作業一旦主要長期操作完成,將執行操作完成。 您可以使用一個AsyncTask來執行所有操作,但是您將失去使用兩個可以利用多核CPU的併發線程的優勢,因此可以更快地處理數據/執行操作。此外,我相信在某些Android版本中,您當時只能使用一個AsyncTask。檢查此答案以獲取更多信息:https://stackoverflow.com/a/4072832/3535408。所以你最好用線程:更清晰,更簡單,更快。
對於什麼是值得的,AsyncTasks可以並行運行。使用'task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);'。然而,這是鎖定到更高版本的Android版本。 – Knossos
@Knossos完全正確,這就是爲什麼我在我的** Note3 **中包含一個鏈接,它提供了關於運行並行AsynTasks問題的很多細節;-) – Mackovich
糟糕!錯過了。我很抱歉! – Knossos