Handler ThreadHandler Looper的总结

最近android学到了多线程这块,有点难以理解,在此去网上搜集了些资料,整理如下:

 

1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。 而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。 HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。 与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。

这里贴上mars老师的一段教学代码,以便理解:

 

public class HandlerTest2 extends Activity {


 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  //打印了当前线程的ID
  System.out.println("Activity-->" + Thread.currentThread().getId());

  //生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供
  HandlerThread handlerThread = new HandlerThread("handler_thread");
 

 //在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();
  handlerThread.start();

//new一个handler来承载Looper,正如上文所说,一个handler和一个Looper是一一对应的

  MyHandler myHandler = new MyHandler(handlerThread.getLooper());
  Message msg = myHandler.obtainMessage();

  //将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象
  msg.sendToTarget();
 }
 
 class MyHandler extends Handler{
  public MyHandler(){
   
  }
  public MyHandler(Looper looper){  
//调用父类的构造方法,也就是Handler类的构造方法  

 super(looper);
  }

  public void handleMessage(Message msg) {
   System.out.println("Handler--->" + Thread.currentThread().getId());
   System.out.println("handlerMessage");
  }
 }
}

2.调用handler的post方法添加线程,调用的是线程的run方法,而不是start方法,此时handler和被调用的线程仍然处于同一线程之中。

如果要实现多线程, 必须按照上一条所写的那样,让handler与每一个looper一一对应,即与一个线程一一对应。

 

最后附上博文一篇:http://blog.csdn.net/wanglong0537/archive/2011/04/06/6304239.aspx

 

Handler ThreadHandler Looper的内容并不是到此为止,这只是最基本的理解,以后随着学习的深入,我会再次总结。

你可能感兴趣的:(thread,多线程,编程,android,框架,Class)