Android要点

1: Launcher实际上是一个activity,它是安卓系统中的桌面启动器,用来实现显示系统首页,即HOME界面

public final class Launcher extends Activity implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks, View.OnTouchListener

2:每个app进程只会存在一个Instrumentation对象,此app中的每个Activity都持有此Instrumentation对象的一个引用。

public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks2 {
            .
            .
            .
             private Instrumentation mInstrumentation;
            .
            .
            .
 final void attach(Context context, ActivityThread aThread,
            Instrumentation instr, IBinder token, int ident,
            Application application, Intent intent, ActivityInfo info,
            CharSequence title, Activity parent, String id,
            NonConfigurationInstances lastNonConfigurationInstances,
            Configuration config) {
            .
            .
            .
            mInstrumentation = instr;
            .
            .
            .
            }
 }

3:ActivityManagerService,PackageManagerService,WindowManagerService等等,这些基础的系统服务是被所有的App公用的,当某个App想实现某个操作的时候,要告诉这些系统服务。比如你想打开一个App,就会告诉AMS说:“我要打开这个App,我知道他的住址和名字,你帮我打开吧!”所以是AMS来通知zygote进程来fork一个新进程,来开启我们的目标App的。
AMS是总经理(每个公司仅有一个),管理整个公司,也就是为Android所有app提供服务,负责指挥和调度的,ActivityThread是部门经理(每个部门仅有一个),为一个具体的app服务,Instrumentation则是部门副经理(每个部门仅有一个),负责一个具体的app大事小事,但是一般不抛头露面,听ActivityThread的安排。

4:启动一个Activity的方式有以下几种:
(1)在应用程序中调用startActivity启动指定的Activity
(2)在Home程序中单击一个应用图标,启动新的Activity
(3)按“Back”键,结束当前Activity,返回到上一个Activity
(4)长按“Home”键,显示出当前正在运行的程序列表,从中选择一个启动
这四种启动方式的主体处理流程都会按照第一种启动方式运行,后面三种方式只是在前端消息处理上各有不同。

主要对象功能介绍

ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期
ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是传说中的UI线程或者叫主线程。与ActivityManagerServices配合,一起完成Activity的管理工作
ApplicationThread,用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯。
ApplicationThreadProxy,是ApplicationThread在服务器端的代理,负责和客户端的ApplicationThread通讯。AMS就是通过该代理与ActivityThread进行通信的。
Instrumentation,每一个应用程序只有一个Instrumentation对象,每个Activity内都有一个对该对象的引用。Instrumentation可以理解为应用进程的管家,ActivityThread要创建或暂停某个Activity时,都需要通过Instrumentation来进行具体的操作。
ActivityStack,Activity在AMS的栈管理,用来记录已经启动的Activity的先后关系,状态信息等。通过ActivityStack决定是否需要启动新的进程。
ActivityRecord,ActivityStack的管理对象,每个Activity在AMS对应一个ActivityRecord,来记录Activity的状态以及其他的管理信息。其实就是服务器端的Activity对象的映像。
TaskRecord,AMS抽象出来的一个“任务”的概念,是记录ActivityRecord的栈,一个“Task”包含若干个ActivityRecord。AMS用TaskRecord确保Activity启动和退出的顺序。如果你清楚Activity的4种launchMode,那么对这个概念应该不陌生。

Android通过将这两个Activity保存在同一个Task里来体现这一用户体验。简单来说,一个Task就是用户体验上的一个“应用”。
它将相关的Activity组合在一起,以stack的方式管理(就是前面提到的Activity Stack),这就是Task。
在Android平台上可以将task简单的理解为幽多个Activity共同协作完成某项应用,而不管Activity具体属于哪个Application,
Android要点_第1张图片

Android要点_第2张图片

AMS提供了一个ActivityStack(即下图中的mHistory)来管理所有的activity,activity在AMS中的形式是ActivityRecord,task在AMS中的形式为TaskRecord,进程在AMS中的管理形式为ProcessRecord。如下图所示
Android要点_第3张图片

在AMS中,沒有使用aidl,而是自己去實現了Stub端和Proxy端。Stub端:ActivityManagerService, Proxy 端:ActivityManagerProxy

你可能感兴趣的:(Android要点)