代碼:textView.setText("刷新成功"); Thread.sleep(500); 期望先顯示文字再休眠,實際**休眠結束後才顯示文字**,但 Logcat 先輸出日志。
Thread.sleep() **阻塞當前線程**(此處為主線程/UI 線程)。textView.setText("刷新成功");
new Handler(Looper.getMainLooper()).postDelayed(() -> {
// 500ms 後執行的操作(如跳轉、隱藏等)
doSomethingAfterDelay();
}, 500);
lifecycleScope.launch {
textView.text = "刷新成功"
delay(500) // 掛起協程,不阻塞主線程
doSomethingAfterDelay()
}
Observable.just("刷新成功")
.observeOn(AndroidSchedulers.mainThread())
.doOnNext { textView.setText(it) }
.delay(500, TimeUnit.MILLISECONDS)
.subscribe { doSomethingAfterDelay() }
**主線程只做 UI 操作,耗時/等待操作必須異步/非阻塞**。Thread.sleep、大循環、同步 I/O、數據庫操作均不可在主線程執行。