1.Handler的作用
handler是android sdk处理异步消息的核心类
因为主线程不能处理耗时操作(连接网络、存储数据…)等,因此有些时候我们就必须要开启一个子线程。然而子线程里面又不能更新UI,所以就有了Handler。关于MessageQueue和Looper,有一篇文章分析的很详细,https://www.baidu.com/link?url=iJWq60iI1egm86up1UMCWBJtBIWkVvts52tmH9AK5pDdBhXx-wfQWMHYWqEejquWjAY0K9qOPdsTskWX_NIJWa&wd=&eqid=9814cd03000958c9000000055c678b43。大家可以参考一下。
2.Handler的用法—handler的使用步骤
[1]在主线程定义一个Handler
[2]使用Handler会重写handler里面的handleMessage()方法
private Handler handler = new Handler(){
public void handleMessage(Message msg){
/*
* 更新UI的逻辑
* */
}
};
[3]拿着主线程创建的handler去子线程发消息(也就是调用handler.sendMessage()方法)
handler.sendMessage(message);
[4]经过第[3]步之后,handleMessage()方法就会执行,我们就可以在这个方法里面自己写上更新UI的逻辑(以在ImageView控件上更新一张图片为例)
private Handler handler = new Handler(){
public void handleMessage(Message msg){
/*
* 更新UI的逻辑
* */
Bitmap bitmap = (Bitmap) msg.obj;
ivBGOline.setImageBitmap(bitmap);
}
};
PS:如果仅仅是更新UI,android提供了一个比较方便的API — runOnUiThread,我们直接使用这个API就可以更新UI了。
runOnUiThread(new Runnable() {
@Override
public void run() {
tvTime.setText(str);
}
});