异步消息处理机制
我们知道Android中,是不允许在子线程中进行更新UI的操作的。但是有时,我们必须在子线程中运行一些耗时操作,并且
根据执行结果来更新相应的UI控件,这该怎么办呢? 对于这种情况,Android提供了一套异步消息处理机制,完美的解决
了在子线程中进行UI操作的问题。
使用方法:
修改MainActivity中的代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//首先定义一个整型常量UPDATE_TEXT,用于表示更新TextView这个动作。
public static final int UPDATE_TEXT = 1;
private TextView text;
// 然后新增一个Handler对象,并重写父类的handleMessage()方法,在这里对具体的Message进行处理
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
// 如果发现Message的what字段的值等于UPDATE_TEXT,就将TextView显示的内容改为Nice to meet you
case UPDATE_TEXT:
// 在这里可以进行UI操作
text.setText("Nice to meet you");
break;
default:
break;
}
}
};
...
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.change_text:
new Thread(new Runnable() {
@Override
public void run() {
//这里我们并没有在子线程里直接进行UI操作,而是创建了一个Message对象,
//并将它的what字段值指定为UPDATE_TEXT
//然后调用Handler 的sendMessage() 方法将这条Message发送出去
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message); // 将Message对象发送出去,很快Handler就会
//收到这条Message,并在handleMessage()方法中对它进行处理。
//注意,此时handleMessage()方法中的代码就是在主线程中运行了,所以我们可以放心的进行UI操作
}
}).start();
break;
default:
break;
}
}
}
这就是异步消息处理的基本操作。 下一章节关于异步消息处理机制的深层思想。