在 Android 中,視圖組件并不是線程安全的。出于線程保護,Android 會拒絕子線程對主線程 UI 的更新,并拋出如下異常:
Only the original thread that created a view hierarchy can touch its views.
所以,要跨線程更新 UI,需要使用 Handler 技術。
具體代碼
private static final int PUSH_RECEIVED = 0;
private static final int GET_BASIC_INFO = 1;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
if(message.what == PUSH_RECEIVED) {
statusTextView.setText("異常");
}
if(message.what == GET_BASIC_INFO) {
nameTextView.setText(nameText);
statusTextView.setText(statusText);
rateTextView.setText(rateText);
recordTextView.setText(recordText);
}
}
};
Message message = new Message();
message.what = PUSH_RECEIVED;
handler.sendMessage(message);
子線程通過 Handler 通知主線程更新 UI,主線程收到消息后,在線程中對 UI 進行更新。