因为要用到UI的更新,所以用到handler,但是遇到一些小问题
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 导包的时候竟然导错了,查看源代码,根本就没有上面handleMessage() 的方法,还要去实现上面抽象方法,
最后发现应该导入 android.os.Handler
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.对于为什么要如此做不明白,于是找到一些结果我理解如下
android中比较费时的程序不能够放到主线程中,不然报错,只能放到子线程中,但是子线程更新UI是线程不安全的【线程不安全见如下解释】,所以要用到handler,
【线程不安全】
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
【我仍然会问】
1.为什么子线程就线程不安全了呢?(我理解的是子线程太多,争着抢着改UI,必定会出问题的)
2.为什么要用Handler呢,而Handler又为什么可以呢?(我只知道Handler在主线程中)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.那么handler又是如何操作的呢?
http://www.cnblogs.com/plokmju/p/android_handler.html
上面这个链接里面讲的非常详细,但是我并不需要这么多,我只想了解Message的过程
首先是将初始化一个Message对象(就是将要传到东西赋给它),Handler中有一个专门处理Message对象的函数handleMessage(Message msg),在子线程中调用它,将赋过值得Message对象传进去,重写handleMessage方法,在里面更新UI。
子线程代码
Message message=new Message();
message.what=SHOW_RESPONSE;
message.obj=response.toString();
handler.handleMessage(message);
主线程代码
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case SHOW_RESPONSE:
String response=(String)msg.obj;
responseText.setText(response);
}
}
};