zoukankan      html  css  js  c++  java
  • HandlerThread 类的学习(转载)

    HandlerThread继承于Thread,所以它本质就是个Thread。HandlerThread类用于方便的创建一个含有looper的线程类,looper用来创建handler类。我们一般不创建looper对象,直接调用HandlerThread即可。HandlerThread本身实现了循环处理消息的功能,不用再直接调用Looper.prepare()和Looper.loop()方法。与普通Thread的差别就在于,它有个Looper成员变量。这个Looper其实就是对消息队列以及队列处理逻辑的封装,简单说就是消息队列+消息循环。

    使用HandlerThread步骤如下:

    //步骤1:创新HandlerThread的一个对象,并开启这个线程,HandlerThread将通过Looper来处理Handler对来中的消息,也就是如果发现Handler中有消息,将在HandlerThread这个线程中进行处理。

    HandlerThread ht = new HandlerThread(“hander_thread”);

    //步骤2:启动handerhandler这个线程;

    ht.start();

    //步骤3:创建handler中,带上Looper的参数,即handlerThread.getLooper()。注意,此处理必须在HandlerThread启动后才能调用,否则会报 ,getLooper()会返回null,则程序异常出错

    Handler handler = new Handler(ht.getLooper()){

    ….

    public void handleMessage(Message msg){

    … …    /*这里的处理,将不在主线程中执行,而在HandlerThread线程中执行,可以通过Thread.currentThread().getId()或者Thread.currentThread().getName()来确定*/

    }

    };

    常用方法:

    • public Looper getLooper()这个方法返回与此线程相关的Looper。如果该线程不能启动或是由于某种原因isAlive()方法返回false,则这个方法返回null,假如这个线程已经启动,那么此方法将阻塞,直到looper被初始化。
    • public int getThreadId():返回线程的标志。
     
  • 相关阅读:
    多层结构中,事务的运用。
    A private conversation
    Sql Server 日志清理 (数据库压缩方法)
    Basic of Ajax
    Persin Buttons
    不知为什么无缘无故加到了一个“邯郸.net俱乐部”,想退出,找不到入口.....
    Wokflow designer not working when openning workflow in nonworkflow VS 2005 project
    GridView中如何取得隐藏列的值?
    Error: cannot obtain value
    Too late
  • 原文地址:https://www.cnblogs.com/porter/p/3142454.html
Copyright © 2011-2022 走看看