main thread
(主線程)也叫UI thread
(UI線程)
背景
從Android4.0
開始,
Android
中請求網絡強制不允許在主線程中操作,
而更新UI
的操作由不允許在子線程中更新UI
。
爲什麼Android從4.0開始就不允許在主線程連接網絡?
爲什麼Android從4.0開始就不允許在非UI線程中進行UI操作?
Android 4.0 和 Android 6.0 版本改動很多,前者主要是限制UI操作,後者主要是規範權限使用
應用場景
當我們的碼農在子線程中請求網絡,拿到服務器返回的數據之後,要更新UI
。
由於系統的要求,勢必會產生一種矛盾:數據在子線程,更新UI要在主線程。
此時我們必須要把數據返回到主線程中才行,Handler
機制應運而生。
Handler
機制是什麼?
答:Handler
機制是Android
中用於線程間通信一套通信機制。
//在主線程中初始化Handler
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//在此處處理消息
}
};
Thread thread = new Thread(){
@Override
public void run() {
super.run();
//在子線程中發送消息
Message msg = new Message();
msg.arg1 = 5;
handler.sendEmptyMessage(msg);
}
};
thread.start();
如果覺得Handler
機制繁瑣,可調用 Activity
的 runOnUiThread()
方法
runOnUiThread(new Runnable() {
void run() {
// Do stuff…
}
});