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

 

 

 

 

 

posted @ 2012-11-13 01:29  ITaem  阅读(531)  评论(0编辑  收藏  举报
我勒个去