因为 Android中 更新UI操作只能在主线程中 进行 所以 需要进行异步消息处理
异步消息处理流程
1、在主线程中 创建Handler对象 并重写 handlerMessage() 方法
2、子线程需要对UI进行更新操作时 创建 Message 对象 并通过handelr 的sendMessage发送出去
3、handler 发送的消息会添加 在 MessageQueue 队列中 等待被处理 ,
4、Looper 会一直尝试从MessageQueue 中 取出待处理的消息 分发给 handler的 handlerMessage() 进行处理
5、由于handler是在主线程中创建的 所以 handlerMessage()方法 也是在主线程中执行 可以放心更新UI操作
// handler 用来 进行异步消息的处理 ,更新UI
public class MainActivity extends AppCompatActivity {
public static final int UPDATE_TEXT = 1;
private TextView textView;
private Handler handler = new Handler(){
public void handleMessage(Message msg){
switch (msg.what){
case UPDATE_TEXT:
//在这里进行UI操作
textView.setText("Nice To Meet You!");
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text_view);
Button change_text = (Button) findViewById(R.id.change_text);
change_text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message);//将message 消息发送出去 。
}
}).start();
}
});
}
}
runOnUiThread() 方法 就是 对 异步消息处理 的封装