于Activity相关的对象
目录:
ActivityThread,
ApplicationThread,
ActivityClientRecord,
Context,
Instrumentation,。
ActivityThread: 我们都知道程序运行的时候有创建一条主线程(ui线程)来进行程序的一些初始化操作。其中ActivityThread中做了大多的工作。:首先ActivityThread只是一个普通的class类文件不是线程类,没有集成Thread不要被Thrad迷惑。他的主要作用有:
(1):通过Looper.PrepareMainlooper()来创建一个轮询器,并且启动轮询器。
final H mH = new H();
private class H extends Handler {
public static final int LAUNCH_ACTIVITY = 100;
// .......
public void handleMessage(Message msg) {
switch(msg.what) {
case LAUNCH_ACTIVITY: {
// 获取AMS远程传递过来的Activity描述对象
final ActivityClientRecord r = (ActivityClientRecord)msg.obj;
r.packageInfo = getPackageInfoNoCheck(r.activityInfo.application, r.compatInfo);
// 这个是真正启动Activity的方法
handleLaunchActivity(r, null);
} break;
}
}
}
(2):new ActivityThread()创建一个ActivityThread对象。
(3):在attach方法中创始化ApplitionThread,用于快进程间通信Ams(ActivityManagerService,管理Activity)。
ApplicationThread:是通信接口binder的实现类,接受Ams的指令。用于进程间通信,其中上面创建的轮询器H就是接受事件,比如启动打开一个Activity。
ActivityClientRecord:Activity信息的描述类,每一个Activity创建的时候都会有一个ActivityClientRecord,
static final class ActivityClientRecord {
IBinder token;
int ident;
Intent intent;
Bundle state;
Activity activity;
Window window;
Activity parent;
String embeddedID;
Activity.NonConfigurationInstances lastNonConfigurationInstances;
boolean paused;
boolean stopped;
...
}
Context:
翻译就是环境的意思。是个抽象类,常用获取资源文件,和一些方法比如startActivity,Context 有两个实现类。ContextImp,ContextWrapper.其中CotextWrapper里有三个主要的子类。ContextThemeWrapper,Application,Service.其中ContextThemtWrapper的子类是Activity。Activity因为需要界面ui所以继承ContextThemtWrapper。而Application,和service不需要所以没有继承。
Instrumentation:这个类很重要,Activity的生命周期方法都是有这个类进行操作的。
通过Instrumentation的callActivityOnCreate方法来回调Activity的onCreate()方法。其他的onResuse,onstart都类似。
Acitivity,Application的创建都是通过反射创建。