Handler消息传递机制
Handler消息传递机制 的使用教程
在android中使用多线程有一点需要注意的是:不能在子线程中动态改变主线程的UI组件的属性。【Handler是android提供的一个用来更新UI组件的机制,也是一个消息处理机制】
Handler类中常用的方法:
handMessage(Message msg) 处理消息的方法,通过重写该方法来处理消息,在发送消息时该方法会自动回调。
sendEmptyMessage(int what)发送空消息
sendMessageDelayed(Message msg,long uptimeMillis)指定多少毫秒之后发送消息
obtainMessage() 获取消息
下面提供一个简单的子线程在handler消息机制下更新主线程UI组件内容的例子,代码量非常少,主要用于体验handler的消息机制;
布局文件:
主线程代码:
package com.example.handler;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivityextends AppCompatActivityimplements View.OnClickListener {
private TextViewmTextview;
private ButtonmButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
Handlerhandler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what==0x11){
mTextview.setText("这就是生活的目的");
}
}
};
private void initView() {
mTextview = (TextView) findViewById(R.id.textview);
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
jump();
break;
}
}
private void jump() {
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
//handler发送消息告诉thread知道更新组件的任务交给我handler就可以了
handler.sendEmptyMessage(0x11);
}
});
//开启线程
thread.start();
}
}