zoukankan      html  css  js  c++  java
  • Handler 源码分析

    App启动的入口
    ActivityThread.java

    public static void main(String[] args) {
      ...
      Looper.prepareMainLooper();
      ...
      ActivityThread thread = new ActivityThread();
      thread.attach(false, startSeq);
    
      if (sMainThreadHandler == null) {
        sMainThreadHandler = thread.getHandler();
      } 
      Looper.loop();
    }
    

    Looper.java

        static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
        ......
        private Looper(boolean quitAllowed) {
            mQueue = new MessageQueue(quitAllowed);
            mThread = Thread.currentThread();
        }
        ......
        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));
        }
    
        public static void prepareMainLooper() {
            prepare(false);
            synchronized (Looper.class) {
                if (sMainLooper != null) {
                    throw new IllegalStateException("The main Looper has already been prepared.");
                }
                sMainLooper = myLooper();
            }
        }
    
        public static @Nullable Looper myLooper() {
            return sThreadLocal.get();
        }
    
    
  • 相关阅读:
    大数据基础——MR编程应用——对中间件的操作
    Hadoop_Hive整理——原理及配置
    Hadoop&Hive——小结
    mysql_小结之事务
    Linux_大数据与数据仓库
    移动布局小结
    JDBC——小结
    Mysql优化反刍
    NoSql-Verson1.0
    python-6
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/14948961.html
Copyright © 2011-2022 走看看