Handle的简单用法
用惯了 java的 线程处理方法,在android上就碰壁了;
很自然的,首先会这样:
public class MyThread implents Runable{ public void run(){ // 数据处理,界面更新 // } }
这在android上面就碰壁了,究其原因就是android UI线程是线程不安全的。
每次系统只允许,其主线程绘制,刷新UI。
其实在android中提供了一个方便的实现方法,就是Handle,和AsyncTask(也是很方便的实现)。
Handle这个类是一个阻塞读取Message Quenu 的操作类。
而message Quenu就是一个进程里的 每个线程的交互数据池(或者叫做仓库)。
假如有一个线程需要刷新UI,那他发送的数据就发到了message Quenu,而UI线程可以通过Handle的定时操作去读取数据,从而更新UI
下面是用法:
public Handler hancle=new Handler(){ @Override public void handleMessage(Message msg) { //***** //***** 操作 super.handleMessage(msg); } };
在方法体内就可以实现需要操作UI线程的更新
而message对象可以传递两个比较重要的参数,一个是int 数值类型,一个是对象
如:
Message ms= hancle.obtainMessage();
ms.obj=object;
而在函数内就可以用:
switch(msg.what){
case 1:
//操作
Object o=msg.obj;
break;
case 2:
Object o=msg.obj;
break;
.......
}
来操作。
Handle还有一个可以定时的处理线程更新的方法,
就是创建完对象后,调用
handle.postDelayed(Runable run,long time);
run为需要循环执行的线程,而time是间隔,单位是毫秒。
那样就基本可以知道Handle使用了。
下篇讲解:AsyncTask