Activity的启动和创建流程
2017-06-15 23:24
337 查看
转自:http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html
一 Activity概念
Android的核心不是Application而是Activity,至少在我们开发的时候是这样的;Activity就是被用来进行与用户交互和用来与android内部特性交互的组件,
在应用程序中用到的所有activity都需要在manifest.xml文件中进行注册;
那么Activity又是怎样一种组件,怎么样进行显示交互的,一个activity实例是如何被管理和运行起来的,activity生命周期又是怎么一回事。
二 Activity框架和管理结构
Activity管理的核心是AcitivityManagerService,是一个独立的进程;ActiveThread是每一个应用程序所在进程的主线程,循环的消息处理;
ActiveThread与AcitivityManagerService的通信是属于进程间通信,使用binder机制;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/03/335a3fe8655d75d865a76d83dcb5e80e.jpg)
三 Activity启动过程
以启动一个应用程序startActivity为例看一下代码执行的大概流程:![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/03/a9662b74c31ac50a966672bb361b9ef6.jpg)
可将其分为6个过程:
1 使用代理模式启动到ActivityManagerService中执行;
2 创建ActivityRecord到mHistory记录中;
3 通过socket通信到Zgote相关类创建process;
4 通过ApplicatonThread与ActivityManagerService建立通信;
5 ActivityManagerService通知ActiveThread启动Activity的创建;
6 ActivityThread创建Activity加入到mActivities中并开始调度Activity执行;
请看下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/a0f78ba308813ee7f53362251337cdb2.jpg)
并不是所有启动一个Activity都是这样的过程:一个应用程序中所有Activity只有一个ActivityThread属于一个Process;
ActivityStack并不是每次都需要创建一个Stack来管理Activities;
下面看看adnroid系统中四个重要概念:
Application:由多个相关的松散的与用户进行交互Activity组成,通常被打包成apk后缀文件中;
Activities:应用程序的主要组成部分,是应用程序的核心;
ActivityStack:将应用程序中打开的Activity保存在历史栈中,按照栈的先进后出的原则;
Start Activity时入栈,返回时出栈;
Task:将一系列相关的Activity组合,完成某个应用程序完整操作;不管activity属于哪
个Application的;
例如:写信息—调用—文件管理,都属于一个Task,但属于两个Application;
四 Activity启动流程类结构分析
1 ActivityService相关类
使用了Proxy代理模式:ActivityManagerProxy代理ActivityManagerService;
并为之提供了公共的访问接口:IActivityManager;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/03/f8e9f4844dc25bcd90bfa54c71921395.jpg)
2 Activity启动
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/03/8ddd9c1424ad3f6572ee18bcd5362054.jpg)
3 ActivityStack管理
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/03/a4de945f632df573738584ce6b733904.jpg)
ActivityStack创建并存储系列创建的Activity实例,将其入栈管理mHistory;
4 ActivityThread
This manages the execution of the main thread in anapplication process,scheduling and executing activities,broadcasts, and other operations on it as the activity manager requests.
是应用程序的主线程,消息循环执行者;其中有很多的内部类来完成工作;
ActivityThread使用内部类:ApplicationThread与ActivityManagerService进行通信,
ActivityThread将状态变化传递控制客户端Activity的状态执行;
mActivities保存由ActivityStack所创建的ActivityRecord相关实例引用;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201404/03/9bb330d7e0efe6feaee292305e9fe438.jpg)
借助网上一些达人的总结以及自己结合代码的分析,总结上述流程框架方面的东东;
相关文章推荐
- 关于Window创建流程的一点愚见(Activity启动过程中)
- android N进程启动流程(一)(捕获输入事件、准备创建activity、焦点切换)
- 简述Activity的启动流程(类的创建)
- Activity启动流程、Window创建流程
- android N进程启动流程(二)(上一个activity的暂停、进程启动、绑定进程与创建application)
- Activity启动及窗口创建过程详解
- Android 组件 — Activity (创建与启动)
- Activity中Dialog创建流程以及SparseArray分析
- activity启动流程
- Android学习笔记——Activity的启动和创建
- Android Activity学习笔记——Activity的启动和创建
- startActivity -进程不在->创建进程->ActivityThread.main->启动主线程消息循环
- Activity的启动流程
- Android Activity学习笔记——Activity的启动和创建
- Activity启动分析(二)--创建Window和View
- FileNet创建流程并启动过程的描述
- 运用内核创建一个小的linux【壹】--分析linux启动流程
- Activity启动流程
- activity 启动流程分析
- Activity的启动流程