zoukankan      html  css  js  c++  java
  • Android应用程序进程启动过程(后篇)

    前言

    在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环。

    1.Binder线程池启动过程

    我们首先来看RuntimeInit类的zygoteInit函数,如下所示 
    frameworks/base/core/java/com/android/internal/os/RuntimeInit.java

    注释1处会在新创建的应用程序进程中创建Binder线程池

    2.消息循环创建过程

    frameworks/base/core/java/android/app/ActivityThread.java

     public static void main(String[] args) {
            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain");
            SamplingProfilerIntegration.start();
    ...
            Looper.prepareMainLooper();//1
            ActivityThread thread = new ActivityThread();//2
            thread.attach(false);
            if (sMainThreadHandler == null) {
                sMainThreadHandler = thread.getHandler();
            }
            if (false) {
                Looper.myLooper().setMessageLogging(new
                        LogPrinter(Log.DEBUG, "ActivityThread"));
            }
            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
            Looper.loop();//3
            throw new RuntimeException("Main thread loop unexpectedly exited");
        }

    注释1处在当前应用程序进程中创建消息循环,注释2处创建ActivityThread,注释3处调用Looper的loop,使得Looper开始工作,开始处理消息。可以看出,系统在应用程序进程启动完成后,就会创建一个消息循环,用来方便的使用Android的消息处理机制。

  • 相关阅读:
    Installing PHP-7 with Memcached
    在Ubuntu1.4下升级php和Yii2
    apache设置反向代理实现前端js跨域访问
    mysql多重排序判断,根据状态区分时间排序方式
    利用缓存锁解决接口连续访问
    phpstorm启动内存配置
    ubuntu ssh修改用户密码
    Yii2手动安装第三方扩展(转)
    html input file 设置文件类型
    yii2 gridView中使用下拉列表筛选数据
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/6218627.html
Copyright © 2011-2022 走看看