当前标签 / HandlerThread / 总共2篇

HandlerThread详解

概述

在日常开发中,我们经常会通过 new Thread(){}.start(); 的方式来开辟一个新的线程。但是如果我们想要多次执行任务的时候,通过这种方式我就会创建多个线程,这样会使我们的程序运行起来越来越慢。通常情况下我会采用 HandlerThread 的方式来开辟一个线程,那么 HandlerThread 是什么呢?今天我们来介绍一下 HandlerThread。

正文

HandlerThread 是 Thread 的一个子类,HandlerThread 自带 Looper 使他可以通过消息队列来重复使用当前线程,节省系统资源开销。这是它的优点也是缺点,每一个任务都将以队列的方式逐个被执行到,一旦队列中有某个任务执行时间过长,那么就会导致后续的任务都会被延迟处理。它的使用也比较简单。

HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();

mHandler = new Handler(thread.getLooper());
mHandler.post(new Runnable(){
    //...
});

接下来我们写一个完整的 Demo,然后在分析一下它的实现原理。

阅读更多

Handler和HandlerThread

Hander

Hander的主要作用有两个:

  1. 延迟处理消息。
  2. 在其他线程处理消息。

这里的消息可以理解为MessageRunnable,通过如下方法来调度消息。

方法作用
post(Runnable)将Runnable对象添加到消息队列
postAtTime(java.lang.Runnable, long)加入消息队列,在特定时间执行Runnable对象
postDelayed(Runnable, Object, long)加入消息队列,延迟执行
sendEmptyMessage(int)仅仅发送what值消息
sendMessage(Message)将Message对象加入队列
sendMessageAtTime(Message, long)同理
sendMessageDelayed(Message, long)同理

Runnable实际上是将该Runnable匿名对象排入队列,在其他线程执行该消息,这里的其他线程可以理解为MessageQueue所在的线程。

阅读更多