最近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的内容并不是到此为止,这只是最基本的理解,以后随着学习的深入,我会再次总结。

更多相关文章

  1. 主线程中的Looper.loop()一直无限循环为什么不会造成ANR?
  2. android中的通信机制总结
  3. Android中activity和xml的第一个项目
  4. android下jni开发总结
  5. Binder驱动之设备初始化
  6. Android应用程序资源——menu菜单资源
  7. 【Android架构师java原理专题详解】一;泛型原理详解
  8. Android常见面试题&字节跳动、阿里、腾讯2019实习生Android岗部
  9. Android(安卓)限制textview Edittext 只能输入电话号码和特定字

随机推荐

  1. Linux进程通信[2]-互斥锁和条件变量
  2. linux运行命令缺少依赖库的查找方法
  3. 64位win 7装Linux虚拟机(RedHat)
  4. 看谁能找出bug★☆open函数总是返回-1
  5. linux报错之--->export `=' not a valid
  6. shell脚本let命令在windows下编辑后上传
  7. Linux下Tomcat开启查看GC信息
  8. 管道是否会阻止它的执行中途? [重复]
  9. VIM 编辑器使用基础介绍
  10. Re:从零开始的Linux之路(文件权限)