7月 152020
 

一. ResolveInfo

  用于根据intent获取AndroidManifest.xml中的Activity或者Service或者Provider中包含对应的intent-filter的信息?

  成员包括ActivityInfo、ServieInfo、ProviderInfo、Icon等。

二. ActivityInfo

  从AndroidManifest.xml中获取的应用的activity或者receiver的信息。

  AndroidManifest.xml中定义的几种launchMode的定义也在这个类里有对应的定义
  • public static final int LAUNCH_MULTIPLE = 0; //对应standard
  • public static final int LAUNCH_SINGLE_TOP = 1; //对应singleTop
  • public static final int LAUNCH_SINGLE_TASK = 2; //对应singleTask
  • public static final int LAUNCH_SINGLE_INSTANCE = 3; //对应 singleInstance

 

三. ActivityStackSupervisor

  ActivityStack主管,在ActivityManagerService中使用一个ActivityStackSupervisor来管理所有的ActivityStack?

  通过查找系统所有代码发现,只有在此类的createStack函数中新建了ActivityStack实例(并不是说只创建了一个实例),所以所有的ActivityStack是通过这个对象来管理的。

  也只有在ActivityManagerService中新建了一个ActivityStackSuperVisor实例,也就是系统中只有一个ActivityStackSupervisor对象

  另外这个类还负责和PackmanagerService的一些交互,还用于判断进程是否存在(调用ams的函数),并起动新进程(调用ams的函数)

四. ActivityRecord

  用于表示Activity的一结构,包括Activity相关的很多信息。

  一些变量

  final String taskAffinity – 在AndroidManifest.xml中的Activity节点中定义的taskAffinity

  1. isResolverActivity()

  此Activity是不是一个ResolverActivity

  2. mActivityType可能为以下几种类型

  static final int APPLICATION_ACTIVITY_TYPE = 0;
  static final int HOME_ACTIVITY_TYPE = 1;
  static final int RECENTS_ACTIVITY_TYPE = 2;
  static final int ASSISTANT_ACTIVITY_TYPE = 3;

五. ActivityStarter

  诠释如何启动Activity的控制器。

  根据intent和flag信息,并将这些信息准备相应的activity、Activity Task和Activity Stack的信息。

  我看了一下代码,主要是根据intent中的flag信息处理相关的Activity、Activity Task和Activity Stack的相关信息。

  这个类是为了减轻ActivityManagerService的代码量,分离出来一部分逻辑,好让逻辑更清晰一些。

  一些成员变量:

  mSourceRecord – 源Activity的ActivityRecord对象

  mInTask – 调用startActivity的context所在的task,可能为null(比如service中调用或者通知栏调用?),在启动Activity时在setInitialState函数中传入被赋值

  mLaunchFlags – 新Activity启动时的一些FLAG标志,通过一系列的计算得到

  private boolean mLaunchSingleTop; 在setInitialState函数中根据要启动的Activity的ActivityRecord对象的launchMode判断

  private boolean mLaunchSingleInstance; 在setInitialState函数中根据要启动的Activity的ActivityRecord对象的launchMode判断

  private boolean mLaunchSingleTask; 在setInitialState函数中根据要启动的Activity的ActivityRecord对象的launchMode判断

  1. 函数setInitialState()

  在startActivityUnchecked函数中调用,用于初始化本类中的一些变量。

  3. 函数computeLaunchingTaskFlags()

  计算要启动的Activity的task标志

  4. 函数computeSourceStack

  计算源Activity所在的stack?

六. ActivityStack

  Activity栈类,用于管理某个Activity栈。

  其中:

  final ArrayList<ActivityRecord> mLRUActivities – 是用于存储正在运行Activity列表,列表中最外面一条记录,是最近使用的Activity

七. TaskRecord

  final ArrayList<ActivityRecord> mActivities – 此Task中的Activity列表

  private ActivityStack mStack; – 此Task所在的Activity栈

  1.函数getBaseIntent()

  获取任务中根Activity的 intent

  2.函数getRootActivity()

  从根Activity往外遍历(列表mActivities),获取非finishing状态的Activity的ActivityRecord对象

八. ResolverActivity

  继承自Activity,如果startActivity传入的intent对应多个应用,比如intent中打开url链接,但是系统中有多个浏览器应用,将弹出这个Activity让用户选择 。

打赏
 Posted by on 2020-07-15

Sorry, the comment form is closed at this time.