Android handlethread

Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.
翻译:
HandlerThread能够新建拥有Looper的线程。这个Looper能够用来新建其他的Handler。(线程中的Looper)需要注意的是,新建的时候需要被回调。

private HandlerThread handlerThread;
private Handler handler;
......

handlerThread = new HandlerThread("handlerthread");
        handlerThread.start();

        handler = new Handler(handlerThread.getLooper()) {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                LogUtil.print("handle,消息" + msg.what + Thread.currentThread().getName());
                switch (msg.what) {
                //可执行耗时操作
           ..........
           ..........

                }
            }
        };

        //在主线程给handle发送消息
        final Message message =new Message();
        message.what=1;
        handler.sendMessage(message);

        new Thread(new Runnable() {
            @Override
            public void run() {
                Message message1 = new Message();
                message1.what = 2;
                handler.sendMessage(message1);
            }
        }).start();
........


 @Override
    protected void onDestroy()
    {
        super.onDestroy();
        //释放资源
        mHandlerThread.quit();
    }

HandlerThread的特点

HandlerThread将loop转到子线程中处理,说白了就是将分担MainLooper的工作量,降低了主线程的压力,使主界面更流畅。

开启一个线程起到多个线程的作用。处理任务是串行执行,按消息发送顺序进行处理。HandlerThread本质是一个线程,在线程内部,代码是串行处理的。

但是由于每一个任务都将以队列的方式逐个被执行到,一旦队列中有某个任务执行时间过长,那么就会导致后续的任务都会被延迟处理。

HandlerThread拥有自己的消息队列,它不会干扰或阻塞UI线程。

对于网络IO操作,HandlerThread并不适合,因为它只有一个线程,还得排队一个一个等着。

猜你喜欢

转载自blog.csdn.net/k1234o/article/details/80763806
今日推荐