再一次探索Activity的启动
来源:互联网 发布:网络语蛋炒饭 编辑:程序博客网 时间:2024/06/15 10:49
用户从Launcher程序点击应用图标可启动应用的入口Activity,Activity启动时需要多个进程之间的交互,Android系统中有一个zygote进程专用于孵化Android框架层和应用层程序的进程。还有一个SystemServer进程,该进程里运行了很多Binder Service,例如ActivityManagerService,PackageManagerService,WindowManagerService,这些binder service分别运行在不同的线程中,其中ActivityManagerService负责管理Activity栈,应用进程,task。
用户在Launcher程序里点击应用图标时,会通知ActivityManagerService启动应用的入口Activity,ActivityManagerService发现这个应用还未启动,则会通知Zygote进程孵化出应用进程,然后在这个dalvik应用进程里执行ActivityThread的main方法。应用进程接下来通知ActivityManagerService应用进程已启动,ActivityManagerService保存应用进程的一个代理对象,这样ActivityManagerService可以通过这个代理对象控制应用进程,然后ActivityManagerService通知应用进程创建入口Activity的实例,并执行它的生命周期方法。
Activity的管理采用binder机制,管理Activity的接口是IActivityManager. ActivityManagerService实现了Activity管理功能,位于system_server进程,ActivityManagerProxy对象是ActivityManagerService在普通应用进程的一个代理对象,应用进程通过ActivityManagerProxy对象调用ActivityManagerService提供的功能。应用进程并不会直接创建ActivityManagerProxy对象,而是通过调用ActiviyManagerNative类的工具方法getDefault方法得到ActivityManagerProxy对象。所以在应用进程里通常这样启动Activty:
ActivityManagerNative.getDefault().startActivity()
应用进程需要调用ActivityManagerService提供的功能,而ActivityManagerService也需要主动调用应用进程以控制应用进程并完成指定操作。这样ActivityManagerService也需要应用进程的一个Binder代理对象,而这个代理对象就是ApplicationThreadProxy对象。
ActivityManagerService通过IApplicationThread接口管理应用进程,ApplicationThread类实现了IApplicationThread接口,实现了管理应用的操作,ApplicationThread对象运行在应用进程里。ApplicationThreadProxy对象是ApplicationThread对象在ActivityManagerService线程 (ActivityManagerService线程运行在system_server进程)内的代理对象,ActivityManagerService通过ApplicationThreadProxy对象调用ApplicationThread提供的功能,比如让应用进程启动某个Activity。
ActivityManagerService管理Activity时,主要涉及以下几个类:
(1) ActivityManagerService,它是管理activity的入口类,聚合了ProcessRecord对象和ActivityStack对象(2) ProcessRecord,表示应用进程记录,每个应用进程都有对应的ProcessRecord对象
(3) ActivityStack,该类主要管理回退栈
(4) ActivityRecord,每次启动一个Actvity会有一个对应的ActivityRecord对象,表示Activity的一个记录
(5) ActivityInfo,Activity的信息,比如启动模式,taskAffinity,flag信息(这些信息在AndroidManifest.xml里声明Activity时填写)
(6) TaskRecord,Task记录信息,一个Task可能有多个ActivityRecord,但是一个ActivityRecord只能属于一个TaskRecord
Activity启动分析:
1. Activity调用ActivityManagerService启动应用
2. ActivityManagerService调用Zygote孵化应用进程
3. Zygote孵化应用进程
4. 新进程启动ActivityThread
5. 应用进程绑定到ActivityManagerService
6. ActivityThread的Handler处理启动Activity的消息
- 再一次探索Activity的启动
- 探索Activity 的启动模式
- 开发艺术探索总结-activity的启动模式
- Android开发艺术探索笔记一:Activity的启动模式
- android开发艺术探索 3 Activity的启动模式
- 《Android开发艺术探索》读书笔记----第一章:Activity的启动模式
- Activity的启动过程(Android开发艺术探索学习笔记)
- Android开发艺术探索-Activity的启动模式
- Activity生命周期的探索
- 关于《Android开发艺术探索》的Activity启动模式的讨论
- [Andorid开发艺术探索 读书笔记]Activity的生命周期和启动模式 (一)
- 《Android开发艺术探索》笔记之Activity的生命周期和启动模式
- 源码探索系列3---四大金刚之Activity的启动过程完全解析
- 《Android开发艺术探索》读书笔记--part1 Activity的生命周期和启动模式
- 第一章Activity的生命周期和启动模式(Android开发艺术探索)
- [Andorid开发艺术探索 读书笔记]Activity的生命周期和启动模式 (二)
- 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式
- 《Android开发艺术探索》读书笔记——Activity的生命周期和启动模式
- hive数据类型
- numpy中的meshgrid函数
- Java--回调模型
- @Autowired重要重要
- H.266 JEM相对于HEVC HM的改进
- 再一次探索Activity的启动
- wxWidgets学习
- 7-2 判断上三角矩阵(15 分)
- 基于Unity3D的相册系统的实现
- STL简介
- linux内核的I2C子系统详解1——I2C总线概览、驱动框架概览
- java使用IO流完成文件的复制(文本、图片、视频)
- Scala中trait
- Java IO-BufferedInputStream