美文网首页
HandlerThread面试详解

HandlerThread面试详解

作者: 程序猿BOSS | 来源:发表于2017-10-24 10:39 被阅读29次

    1、handlerThread是什么

    1.1HandlerThread本质上是一个线程类,它集成了Thread

    1.2HandlerThread有自己的内部Looper对象,可以进行looper循环,在HandlerThread可以创建Handler来发送和处理消息。

    1.3通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务。

    1.4优点是不会有堵塞,减少了对性能的消耗,缺点是不能同时进行多任务的处理,需要等待进行处理,处理效率较低。

    1.5与线程池注重并发不同,HandlerThread是一个串行队列。HandlerThread背后只有一个线程。

    示例代码:

    public classMainActivityextendsAppCompatActivity {

    privateHandlerThreadmHandler_thread;

    privateHandlermHandler;

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    //创建一个线程,线程名字:handler-thread

    mHandler_thread=newHandlerThread("handler_thread");

    //开启一个线程

    mHandler_thread.start();

    //在这个线程中创建一个handler对象

    mHandler=newHandler(mHandler_thread.getLooper()){

    @Override

    public voidhandleMessage(Message msg) {

    super.handleMessage(msg);

    //这个方法是运行在 handler-thread 线程中的 ,可以执行耗时操作

    Log.d("handler ","消息: "+ msg.what+"  线程: "+ Thread.currentThread().getName()  );

    }

    };

    }

    public voidonMainThread(View view){

    //在主线程给handler发送消息

    //        mHandler.sendEmptyMessage(1);

    //        Log.d( "handler " , "消息源线程" + Thread.currentThread().getName()  ) ;

    for(inti =0;i <10;i++) {

    mHandler.sendEmptyMessage(i);

    }

    }

    public voidonChildThread(View view){

    newThread(newRunnable() {

    @Override

    public voidrun() {

    //在子线程给handler发送数据

    mHandler.sendEmptyMessage(2);

    Log.d("handler ","消息源线程"+ Thread.currentThread().getName()  );

    }

    }).start();

    }

    @Override

    protected voidonDestroy() {

    super.onDestroy();

    //释放资源

    mHandler_thread.quit();

    }

    }

    相关文章

      网友评论

          本文标题:HandlerThread面试详解

          本文链接:https://www.haomeiwen.com/subject/cikauxtx.html