Activity生命周期
activity在Android系统中代表的就是一个屏幕,一个App就是由许多个不同的Acitivty组成的,并且不同进程之间的Activity是可以相互调用的。
- protected void onCreate(Bundle savedInstanceState);
- protected void onRestart();
- protected void onStart();
- protected void onResume();
- protected void onPause();
- protected void onStop();
- protected void onDestory();
以上为Activity生命周期中的各个时期的回调方法,在不同的方法中我们可以执行不同的逻辑。
Activity如何创建
Activity的创建都在对应应用程序进程ActivityThread类中完成。Activity类的创建完成之后会调用Activity#attach方法
当需要创建一个activity时候,ActivityThread的H类(一个handler)会收到一个LAUNCH_ACTIVITY的消息
public void handleMessage(Message msg) {
if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));
switch (msg.what) {
case LAUNCH_ACTIVITY: {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityStart");
final ActivityClientRecord r = (ActivityClientRecord) msg.obj;
r.packageInfo = getPackageInfoNoCheck(
r.activityInfo.applicationInfo, r.compatInfo);
// activity 真正的创建
handleLaunchActivity(r, null, "LAUNCH_ACTIVITY");
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
} break;
... //省略后面的代码
}
上面的handleMessage是ActivityThread的H类里面的方法,处理发送过来的各种handler消息。上面截取的代码是收到一个LAUNCH_ACTIVITY的message,执行handleLaunchActivity。
private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) {
// 调用performLaunchActivity获得一个Activity
Activity a = performLaunchActivity(r, customIntent);
if (a != null) {
r.createdConfig = new Configuration(mConfiguration);
Bundle oldState = r.state;
//调用Activity 的Resume
handleResumeActivity(r.token, false, r.isForward,
!r.activity.mFinished && !r.startsNotResumed);
}
...
}
上面的通过performLaunchActivity获取到一个activity,并调用了handleResumeActivity。再去进去performLaunchActivity看看。
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
...
Activity activity = null;
try {
java.lang.ClassLoader cl = r.packageInfo.getClassLoader();
//通过反射获取一个activity
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
StrictMode.incrementExpectedActivityCount(activity.getClass());
r.intent.setExtrasClassLoader(cl);
r.intent.prepareToEnterProcess();
if (r.state != null) {
r.state.setClassLoader(cl);
}
} catch (Exception e) {
if (!mInstrumentation.onException(activity, e)) {
throw new RuntimeException(
"Unable to instantiate activity " + component
+ ": " + e.toString(), e);
}
}
...
activity.mCalled = false;
if (r.isPersistable()) {
// 调用activity的OnCreate方法
mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
} else {
mInstrumentation.callActivityOnCreate(activity, r.state);
}
...
if (!r.activity.mFinished) {
// 调用activity的OnStart方法
activity.performStart();
r.stopped = false;
}
...
return activity;
}
可以发现这里我们需要的Activity对象终于是创建出来了,而且他是以反射的机制创建的,然后在代码中其调用Instrumentation的callActivityOnCreate方法。
一 几个类功能说明
ActivityThread
思考:
- ActivityThread结构是什么样的,里面有那重要的属性,方法,内部类?
- ActivityThread主要功能是做什么?
- ActivityThread里面重要方法说明
ApplicationThread
- 继承结构
远程代理ApplicationThreadProxy
ApplicationThread 继承 ApplicationThreadNative 继承 Binder
继承binder接口的一个类和AMS远程通信的类
做什么功能
ApplicationThread 、ApplicationThreadNative、ApplicationThreadProxy之间调用联系方式
主要属性方法