我们都知道android中更新界面的时候要在主线程中跟新,所以我们通常在线程中更新或者获取数据,但是使用Handler 来更新数据。

这里使用的就是android的消息机制。相关的类有Looper,Message,MessageQueue,Handler。Looper是一个消息循环。UI线程默认

情况下就有一个消息循环,但是我们自己的线程没有,我们的线程默认的是使用UI线程的Looper。

我们的线程会有多种用途,有的是要更新UI的,有的是与UI不相干的,与UI相关的可以理所当然的使用UI线程的Looper,但是如果与

UI线程不相干呢?你也用?好意思吗?这时候我们可以为自己的线程添加Looper。

为自己的线程添加线程有两种方法,其实这两种方法本质上是没有区别的。1.在自己的线程中使用Looper.prepare()以及Looper.loop()。

2.使用sdk中的HandlerThread类,只要实例化HandlerThread对象,并且设置一个Handler就好了。

第一种方法--自己动手的示例如下

1 private class MyThread extends Thread{

2
3publicHandlermHandler=null;
4
5@Override
6publicvoidrun(){
7Looper.prepare();
8
9System.out.println("Thread中name="+Thread.currentThread().getName());
10
11mHandler=newHandler(){
12
13@Override
14publicvoidhandleMessage(Messagemsg){
15System.out.println("handler中name="+Thread.currentThread().getName());
16
17super.handleMessage(msg);
18}
19};
20
21Looper.loop();
22
23}
24

25}


第二种方法--使用HandlerThread的方法如下

定义一个HandlerThread对象,并且设置Handler

1 mThread.start();

2mHandlerThread.start();
3mHandler=newMyHandler(mHandlerThread.getLooper());

1

2privateclassMyHandlerextendsHandler{
3
4publicMyHandler(Looperlooper){
5super(looper);
6}
7
8@Override
9publicvoidhandleMessage(Messagemsg){
10
11System.out.println(Thread.currentThread().getName());
12
13super.handleMessage(msg);
14}
15}

详细的示例见附件

android线程Looper

更多相关文章

  1. Android4.0 无线网络代码分析
  2. Android本地广播动作
  3. Android(安卓)进程和线程(二)
  4. Android中的线程和线程池
  5. Android中线程通讯类Handler
  6. Android(安卓)Handler那些事儿(二)——几个关键类之间的关系
  7. Android事件处理之使用异步任务执行下载
  8. android使用handlerthread创建线程示例
  9. 【Android(安卓)Linux内存及性能优化】(五) 进程内存的优化 - 线

随机推荐

  1. air for android :第一个Android
  2. Android和设计模式:享元模式
  3. 如果没有 Android,世界会怎样?-IT蓝豹
  4. Android日志系统Logcat源代码简要分析
  5. Android读写XML(中)——SAX
  6. Android开发 FAQ
  7. Java多种方式动态生成doc文档
  8. [Android] AsyncTask详解
  9. Google Android操作系统内核编译图文教程
  10. Android扮猪吃虎