1.点击桌面App图标时,Launcher的startActivity()方法,通过Binder通信,调用SystemServer进程中AMS服务的startActivity方法,发起启动请求

2.SystemServer进程接收到请求后,向Zygote进程发送创建进程的请求

3.Zygote进程fork出App进程,并执行ActivityThread的main方法,创建ActivityThread线程,初始化MainLooper,主线程Handler,同时初始化ApplicationThread用于和AMS通信交互

4.App进程通过Binder向SystemServer进程发起attachApplication请求,这里实际上就是App进程通过Binder调用SystemServer进程中AMS的attachApplication方法,上面我们已经分析过,AMS的attachApplication方法的作用是将ApplicationThread对象与AMS绑定

5.SystemServer进程在收到attachApplication的请求,进行一些准备工作后,再通过binder IPC向App进程发送handleBindApplication请求(初始化Application并调用onCreate方法)和scheduleLaunchActivity请求(创建启动Activity)

6.App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送BIND_APPLICATION和LAUNCH_ACTIVITY消息,这里注意的是AMS和主线程并不直接通信,而是AMS和主线程的内部类ApplicationThread通过Binder通信,ApplicationThread再和主线程通过Handler消息交互

7.主线程在收到Message后,创建Application并调用onCreate方法,再通过反射机制创建目标Activity,并回调Activity.onCreate()等方法

8.到此,App便正式启动,开始进入Activity生命周期,执行onCreate/onStart/onResume方法,显示UI

Android App的启动过程相关推荐

  1. Android系统的启动过程

    Android系统的启动过程可以简单地总结为以下几个流程: 加载BootLoader -> 初始化内核 -> 启动init进程 -> init进程fork出Zygote(孵化器)进程 ...

  2. android服务的启动过程,Android Service的启动过程(上)

    原标题:Android Service的启动过程(上) (点击上方公众号,可快速关注) 来源:伯乐在线专栏作者 - xuyinhuan 链接:http://android.jobbole.com/85 ...

  3. Android系统进程Zygote启动过程的源代码分析

    原文地址:http://blog.csdn.net/luoshengyang/article/details/6747696 Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口 ...

  4. c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...

    在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析​zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...

  5. 安卓App的启动过程、安卓布局分类及布局和页面的关系

    Android App 启动流程: 当你想要启动一个app时,首先得点击该app桌面图标.那点击图标时到底发生了什么呢?先看个理论知识 .Launcher: launcher其实就是一个app,从功能 ...

  6. Android系统SystemUI启动过程

    SystemUI主要完成的功能有: (1).Status bars (2).Navigation bars (3).Notification (4).Lockscreen (5).Quick sett ...

  7. ActivityThread的理解和APP的启动过程

    ActivityThread的理解和APP的启动过程 ActivityThread ActivityThread的初始化 主线程Looper的初始化 主线程Handler的初始化 Applicatio ...

  8. Android 解锁屏启动过程

    Android 解锁屏启动过程 一. 开机启动 在开机过程中无线模块初始化时获取SIM卡,状态.在初始化完成后调用vm.systemReady()函数通知进入相应的Lock Screen进行解锁. 1 ...

  9. Android应用程序启动过程源代码分析(5)

    Step 35. MainActivity.onCreate 这个函数定义在packages/experimental/Activity/src/shy/luo/activity/MainActivi ...

最新文章

  1. STL六大组件:分配器、容器、迭代器、算法、仿函数、适配器
  2. 在 2016 年做 PHP 开发是一种什么样的体验?
  3. 读写配置文件app.config
  4. 看完你就晓得正向代理和反向代理了!
  5. C# 这些年来受欢迎的特性
  6. 数据科学生命周期_数据科学项目生命周期第1部分
  7. linux语言的说明顺序有哪些,(linux常用头文件详解.doc
  8. 整理各个平台的访问入口及快速推文的方法
  9. poj Gone Fishing 枚举加贪心 当初做的很纠结啊!!终于A了,与大家分享一下经验
  10. 直播app系统源码,简单的登录界面(登录、注册、记住密码等按键)
  11. windows系统 cmd 下载python包的代理配置
  12. 中华酷联发展电商,警惕京东,且行且思考
  13. 京东放大镜效果的实现
  14. 域名未授权 / 该网站未授权,禁止使用 解决办法:
  15. OA自动化制造自动化
  16. 通通WPF随笔(3)——艺术二维码素材生成器
  17. Android Studio中如何隐藏顶部状态栏和标题栏
  18. 智能车图像处理11-斜入十字补线
  19. 乔治亚大学招收计算机视觉/深度学习/机器人/自动驾驶博士生from 2023 spring
  20. 关于Quartus II 13.0破解失败问题

热门文章

  1. 程序主动进行电话短信报警,自定义电话、短信、钉钉报警通知
  2. Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm
  3. hexo-github-博客搭建指南
  4. 将文件名和文件修改时间批量输出至Excel中
  5. 【Spring】spring基于注解的声明式事务控制
  6. linux vi编辑 整理
  7. jieba分词流程及部分源码解读(一)
  8. LeetCode简单题之二叉树中第二小的节点
  9. cuGraph-GPU图形分析
  10. PointRCNN: 点云的3D目标生成与检测