StrictMode 檢測到主線程網絡操作直接拋出 NetworkOnMainThreadException 崩潰。new Thread(() -> {
try {
String result = HttpUtils.get(url); // 耗時操作
Message msg = handler.obtainMessage(MSG_SUCCESS, result);
handler.sendMessage(msg);
} catch (IOException e) {
handler.sendEmptyMessage(MSG_ERROR);
}
}).start();
Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_SUCCESS) {
listView.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, (List) msg.obj));
}
}
};
示例中 SystemClock.sleep 僅為模擬網絡延遲,**實際開發中不應人為 sleep**,而是依賴網絡庫的超時設置與回調機制。
主線程只做 UI,耗時操作 (網絡、DB、IO、複雜計算) 全部拋給子線程,結果通過消息/回調/流 回主線程,這是 Android 開發鐵律。