Activity启动过程
来源:互联网 发布:淘宝抽到的虾米vip在哪 编辑:程序博客网 时间:2024/06/08 10:59
一 Activity概念
Android的核心不是Application而是Activity,至少在我们开发的时候是这样的;
Activity就是被用来进行与用户交互和用来与android内部特性交互的组件,
在应用程序中用到的所有activity都需要在manifest.xml文件中进行注册;
那么Activity又是怎样一种组件,怎么样进行显示交互的,一个activity实例是如何被管理和运行起来的,activity生命周期又是怎么一回事。
二 Activity框架和管理结构
Activity管理的核心是AcitivityManagerService,是一个独立的进程;
ActiveThread是每一个应用程序所在进程的主线程,循环的消息处理;
ActiveThread与AcitivityManagerService的通信是属于进程间通信,使用binder机制;
三 Activity启动过程
以启动一个应用程序startActivity为例看一下代码执行的大概流程:
可将其分为6个过程:
1 使用代理模式启动到ActivityManagerService中执行;
2 创建ActivityRecord到mHistory记录中;
3 通过socket通信到Zgote相关类创建process;
4 通过ApplicatonThread与ActivityManagerService建立通信;
5 ActivityManagerService通知ActiveThread启动Activity的创建;
6 ActivityThread创建Activity加入到mActivities中并开始调度Activity执行;
请看下图:
并不是所有启动一个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;
2 Activity启动
3 ActivityStack管理
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相关实例引用;
- Activity启动过程分析
- Activity启动过程
- Activity启动过程详解
- android activity 启动 过程
- interView - Activity启动过程
- 启动Activity的过程
- Activity启动过程
- AMS启动Activity过程
- Android-Activity启动过程
- Activity启动过程
- Activity启动过程
- Activity启动的过程
- Activity的启动过程
- Activity的启动过程
- Activity组件启动过程
- Activity启动过程详解
- Activity的启动过程
- Activity 启动过程
- Python如何解析动态网页
- b-tree源代码
- 创建oracle定制定时执行任务
- BloomFilter基本概念和实现原理
- 将 ESP8266 连接到 RaspberryPi
- Activity启动过程
- easyUI window 拖不动的情况
- ubi 的相关概念和解释
- 中国剩余定理
- CentOS──xxx is not in the sudoers file解决方法
- long、string和CString类型转换,CString转double、char *
- javascript的最佳实践
- LeetCode_OJ【24】Swap Nodes in Pairs
- Sensu初探