想要了解Handler,首先要知道为什么要有Handler机制,假设我们要请求网络上的数据,网络请求是耗时操作(因为网络可能存在不稳定性),而在安卓4.0手机版本以后,规定耗时操作必须放在子线程中进行。
例如下面的例子:这是在子线程中的一行代码,我是从Tomcat服务器(学习过程,只有用Tomcat模拟)上获取的数据versionCode,之后从本地获取到了版本号版本号mLocalVersionCode,接下来我想比较这两个版本号,如果服务器的版本号大,我想让他弹出更新的UI,但是我在子线程进行不了对UI的操作,所以必须用Handler消息机制。
if(mLocalVersionCode < Integer.parseInt(versionCode))
//提示更新(弹出对话框UI,因为在子线程中,无法操作UI,所以需要用消息机制handler)
接下来讲Handler到怎么用,到底是个什么东西
Handler可以将从网络获取的数据从子线程发送到主线程,让主线程去操作UI.
引用Handler有几个步骤:
1.在主线程中创建一个Handler对象
2.重写handleMessage方法,用来接收子线程发来的消息。
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
//接收子线程消息
};
3.子线程中创建一个Message对象,为了携带子线程中的对象给主线程,两种方式,第二种底层用了同步锁,会节省内存。
第一种
//创建一个消息
Message msg=new Message();
msg.obj=result;(将获取的数据封装到msg中,result是从服务端获取的数据)
第二种
//创建一个消息
Message msg=Message.obtain();
4.使用Handler对象将Message对象发送到主线程
mHandler.sendMessage(msg); //mHandler在第一步已经被定义成了成员变量,将第三步的msg消息发出
5.handleMessage方法接收到发送来的数据,处理数据
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
//接收子线程消息
String result =(String)msg.obj; //将接收来的数据强转成原来的String类型
//进行UI的操作
};