Activity启动过程的一些知识点

本文是学习 《Android 系统源代码情景分析》 Activity启动过程笔记

在学习Activity启动过程中,调用的方法类,一个接着一个,刚开始看是看完了,但是还是晕晕乎乎的,之后总结问题在于,这个过程中的好多概念都没有理解,最后把常用的都总结一下,再次学习就流畅多了。下边是自己发现的几个学习源码非常好博客,推荐给大家

名称地址描述
http://weishu.mehttp://weishu.me内有 Android 插件化原理解析系列文章
Gityuan博客http://gityuan.com/内容十分丰富
老罗的Android之旅http://blog.csdn.net/Luoshengyang学Android,看老罗

ActivityManagerService AMS

几个重要的参数:

  • caller:指向Launcher 组件所运行在的应用程序进程的ApplicationThread对象

  • intent:包含了即将启动的Activity的信息

  • resulTo:指向ActivityManagerService内部的一个ActivityRecoder对象,它里面保存了Launcher
    组件的详细信息

在ActivityManagerService中,每一个Activity组件都有一个用户ID和一个进程名称;
UID是ActivityManagerService分配的,
PID而进程名称则是由该Activity组件的android:process
属性来决定的

Intrumentation

用来监控应用程序和系统之间的交互操作

weishu Android插件化原理解析——Hook机制之动态代理 代理Hook hock的就是 Intrumentation 可以实现知道当运行的是哪一个Activity.

/**
* Base class for implementing application instrumentation code. When running
* with instrumentation turned on, this class will be instantiated for you
* before any of the application code, allowing you to monitor all of the
* interaction the system has with the application. An Instrumentation
* implementation is described to the system through an AndroidManifest.xml’s
* <instrumentation> tag.
*/

ActivityThread

用来描述一个应用程序进程。系统每当启动一个应用进程时,都会在它里边加载一个ActivityThread实例,并且将这个ActivityThread类实例保存在每一个该进程中启动的Activity组件的父类Activity的成员变量mMainThread中内部对象 {内部类} ApplicationThread

ApplicationThread

Binder本地对象
ActivityManagerService 就是通过它和应用程序进行通信的

mToken

Activity 成员变量 mToken 的类型为IBinder,它是一个Binder代理对象,指向了ActivityManagerService中一个类型为ActivityRecoder 的Binder 本地对象, 这个ActivityRecoder 和ActivityClientRecord (在应用程序进程中使用)一样,都是用来描述启动的Activity组件的

ActivityRecoder

  • 每一个已经启动的ActivityManagerService 中都有一个对应的ActivityRecoder对象,用来维护对应Activity组件的运行状态
    以及信息

  • 有一个成员变量app 类型为ProcessRecord
    描述Activity组件所运行在的应用程序进程。

  • 成员 thread 类型为ApplicationThreadProxy 用来描述一个Binder代理对象,引用的是一个类型为ApplicationThread的Binder本地对象

ActivityStack

用来描述一个Activity组件堆栈
mService 指向ActivityManagerService

mHistory :
同一个任务中所以Activity 组件都是连在一起的

8.ActivityInfo

ProcessRecrd

  • 在ActivityManagerService中每一个应用进程都使用一个ProcessRecord对象描述,并保存在ActivityManagerService中。

  • 描述Activity组件所运行在的应用程序进程。

  • 成员变量thread :是一个Binder代理对象,它指向了用来运行MainActivity组件的应用程序进程的一个ApplicationThread 对象

ActivityClientRecoder

在应用程序进程中的每一个Activity组件都使用一个ActivityClientRecord对象来描述

ApplicationThreadProxy

Binder 代理对象

LoadedApk

ContextImpl

每一个Activty组件启动的时,ActivityThread 类都会为它创建一个ContectImpl对象,用来描述它运行的上下文环境。
这个ContextImpl对象就保存在这个Activity组件父类ContextWrapper的成员变量mBase中

ContextWrapper

mBase Context 类型 指向一个ComtextImpl对象

PackageManagerService

系统启动时会启动一个Package管理服务PackageManagerService,并通过它来安装系统中的应用程序。
PackageManagerService在安装一个应用程序过程中会对它的配置文件AndroidManifest.xml进行解析,
从而得到它里边的组件信息

Launcher

系统启动后会将,Launcher组件启动起来。Launcher组件启动过程中,会向PackageManagerService
查询所有Action名称为

category 名称为

的Activity组件,最后为每一个组件创建一个图标,并将它们的信息与各自的图标关联起来

ActivityManagerNative

getDefault 获取ActivityManagerService 的一个代理对象

Activity 组件 android:taskAffinity 属性

用来描述它的一个专属任务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值