在 Android 中,我們不能直接在非 UI 線程(例如后臺線程)中使用 wait() 和 notify() 或 notifyAll() 方法
使用 runOnUiThread:
在你的后臺線程中,將需要更新的 UI 操作包裝到 runOnUiThread 方法中。這將確保操作在主線程(UI 線程)上執行。
new Thread(new Runnable() {
@Override
public void run() {
// 執行耗時任務
final String result = doSomeLongRunningTask();
// 在主線程中更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
updateUI(result);
}
});
}
}).start();
使用 Handler:
創建一個 Handler 實例并將其關聯到主線程的 Looper。然后,在后臺線程中使用 Handler 的 post 方法來執行 UI 更新操作。
private Handler mHandler = new Handler(Looper.getMainLooper());
new Thread(new Runnable() {
@Override
public void run() {
// 執行耗時任務
final String result = doSomeLongRunningTask();
// 在主線程中更新 UI
mHandler.post(new Runnable() {
@Override
public void run() {
updateUI(result);
}
});
}
}).start();
使用 AsyncTask:
AsyncTask 是一個輕量級的異步類,允許你在后臺線程中執行操作,然后在主線程中更新 UI。這是實現此功能的推薦方法。
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
// 執行耗時任務
return doSomeLongRunningTask();
}
@Override
protected void onPostExecute(String result) {
// 在主線程中更新 UI
updateUI(result);
}
}.execute();
請注意,wait() 和 notify() 或 notifyAll() 是 Java 的內置方法,它們主要用于協調多個線程之間的操作。在 Android 開發中,我們通常使用上述方法來處理線程間的通信和 UI 更新,而不是直接使用 wait()。