zoukankan      html  css  js  c++  java
  • android点滴(26)之让线程拥有自己的消息循环


    我们都知道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         
     3         public Handler mHandler = null;
     4         
     5         @Override
     6         public void run() {
     7             Looper.prepare();
     8             
     9             System.out.println("Thread 中 name = " + Thread.currentThread().getName());
    10             
    11             mHandler = new Handler(){
    12 
    13                 @Override
    14                 public void handleMessage(Message msg) {
    15                     System.out.println("handler 中 name = " + Thread.currentThread().getName());
    16                     
    17                     super.handleMessage(msg);
    18                 }
    19             };
    20             
    21             Looper.loop();
    22             
    23         }
    24         

    25     }  


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

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

    1  mThread.start(); 

    2  mHandlerThread.start();
    3  mHandler = new MyHandler(mHandlerThread.getLooper());

       

     1  

     2privateclass MyHandler extends Handler{
     3         
     4         public MyHandler(Looper looper) {
     5             super(looper);
     6         }
     7         
     8         @Override
     9         public void handleMessage(Message msg) {
    10             
    11             System.out.println(Thread.currentThread().getName());
    12             
    13             super.handleMessage(msg);
    14         }
    15     }

     详细的示例见附件

     android线程Looper

  • 相关阅读:
    Java8性能优化之字符串拼接
    Java8字符串分割的几种方式及性能比较
    【Collections:集合工具类:常用方法】
    【ArrayList嵌套HashMap】
    【集合工具类:Collections】
    【HashMap 嵌套 HashMap】
    【HashMap 嵌套 ArrayList】
    【TreeMapDemo】
    【LinkedHashMap】
    【TreeMap】
  • 原文地址:https://www.cnblogs.com/cody1988/p/2556495.html
Copyright © 2011-2022 走看看