android UI 界面更新
UI线程属于主线程,当涉及到需要更新UI组件的问题时,需要在主线程中更新,另起线程会出现线程崩溃,当子线程需要修改主线程的UI组件时,需要通过发送消息来进行处理,方法如下
-
子线程直接修改UI组件,出现报错:
Activity --> onCreate(){
tv_info = findViewById(R.id.tv_info);
onClick(){
findViewById(R.id.btn_change_str).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
tv_info.setText("hello android!");//子线程直接修改UI线程(主线程)
}
}).start();
}
});
}
} -
解决办法:
主线程中创建消息处理对象,子线程发送message,给主线程的Handler处理
Activity:
private TextView tv_info;
private Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what == 1) {
tv_info.setText("hello android !");
}
}
};
-->onCreate(){
new Thread(new Runnable() {
@Override
public void run() {
tv_info = findViewById(R.id.tv_info);
handler.sendEmptyMessageDelayed(1, 3000);//子线程发送空消息给主线程,主线程handler接收到消息并处理
}
}).start();
}
//最终效果:点击按钮修改text成功