一份你可能需要的用中文注释的 Looper 源码

Straightforward
/**
 * 用来为一个线程运行消息循环的类。默认的线程本身是没有与之相关联的消息循环的;
 * 要创建一个的话,在将要运行循环的线程中调用 {@link #prepare},然后调用
 * {@link #loop} 来让它处理消息,直到循环停止。
 *
 *
 * <p>与消息循环的大多数交互都是通过 {@link Handler} 类进行的。
 *
 * <p>这是一个典型的 Looper 线程实现的例子,
 * 使用 {@link #prepare} 和 {@link #loop} 的分离创建一个初始的 Handler
 * 来和 Looper 交流。
 *
 * <pre>
 *  class LooperThread extends Thread {
 *      public Handler mHandler;
 *
 *      public void run() {
 *          Looper.prepare();
 *
 *          mHandler = new Handler() {
 *              public void handleMessage(Message msg) {
 *                  // 在此处理传入的消息
 *              }
 *          };
 *
 *          Looper.loop();
 *      }
 *  }</pre>
 */
public final class Looper {
    /*
     * API实现说明:
     *
     * 该类包含基于 MessageQueue 设置和管理事件循环所需的代码。
     * 影响队列状态的 APIs 应该在 MessageQueue 和 Handler 上定义,而不是在 Looper 本身上定义。
     * 例如,空闲的 Handlers 和同步障碍被定义在准备线程的队列上,循环和退出则定义在 looper 上。
     */

    private static final String TAG = "Looper";

    // sThreadLocal.get() 将返回 null,除非你调用了 prepare()。
    static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
    private static Looper sMainLooper;  // 由 Looper.class 守护

    final MessageQueue mQueue;
    final Thread mThread;

    private Printer mLogging;
    private long mTraceTag;

    /**
     * 若设置此值,如果消息调度花费的时间比它长,looper 将显示警告日志。
     */
    private long mSlowDispatchThresholdMs;

    /**
     * 若设置,如果消息传递(实际传递时间 - 到达时间)花费的时间超过此时间,looper 将显示警告日志
     */
    private long mSlowDeliveryThresholdMs;

    /**
     * 将当前线程初始化为一个 looper。
     * 这使您有机会在实际启动循环之前创建引用此 looper 的 handlers。
     * 一定要在调用这个方法之后调用 {@link #loop()},并通过调用 {@link #quit()} 结束它。
     */
    public static void prepare() {
        prepare(true);
    }

    private static void prepare(boolean quitAllowed) {
        if (sThreadLocal.get() != null) {
            throw new RuntimeException("Only one Looper may be created per thread");
        }
        sThreadLocal.set(new Looper(quitAllowed));
    }

    /**
     * 将当前线程初始化为 looper,将其标记为应用程序的 main looper。
     * 应用程序的 main looper 是由 Android 环境创建的,因此您永远不需要自己调用此函数。
     * 另见:{@link #prepare()}
     */
    pu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值