ActivityThread中的mH处理LAUNCH_ACTIVITY消息:
- 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);
- handleLaunchActivity(r, null);
- Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
- } break;
- Activity activity = null;
- try {
- java.lang.ClassLoader cl = r.packageInfo.getClassLoader();
- 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);
- }
- }
得到activity类对象后,从而可以调用activity生命周期方法,见源码:
- if (activity != null) {
- Context appContext = createBaseContextForActivity(r, activity);
- activity.mStartedActivity = false;
- int theme = r.activityInfo.getThemeResource();
- if (theme != 0) {
- activity.setTheme(theme);
- }
- activity.mCalled = false;
- if (r.isPersistable()) {
- mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
- } else {
- mInstrumentation.callActivityOnCreate(activity, r.state);
- }
- if (!activity.mCalled) {
- throw new SuperNotCalledException(
- "Activity " + r.intent.getComponent().toShortString() +
- " did not call through to super.onCreate()");
- }
- r.activity = activity;
- r.stopped = true;
- if (!r.activity.mFinished) {
- activity.performStart();
- r.stopped = false;
- }
- if (!r.activity.mFinished) {
- if (r.isPersistable()) {
- if (r.state != null || r.persistentState != null) {
- mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state,
- r.persistentState);
- }
- } else if (r.state != null) {
- mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
- }
- }
- if (!r.activity.mFinished) {
- activity.mCalled = false;
- if (r.isPersistable()) {
- mInstrumentation.callActivityOnPostCreate(activity, r.state,
- r.persistentState);
- } else {
- mInstrumentation.callActivityOnPostCreate(activity, r.state);
- }
- if (!activity.mCalled) {
- throw new SuperNotCalledException(
- "Activity " + r.intent.getComponent().toShortString() +
- " did not call through to super.onPostCreate()");
- }
- }
- }
- r.paused = true;
- mActivities.put(r.token, r);
第10-13行,mInstrumentation.callActivityOnCreate()方法,Instrumentation中callActivityOnCreate()方法代码如下,可以看到这里调用到了activity自身的方法performCreate();Activity类中的performCreate()代码如下,可见终于在这里调用到了Activity生命周期中的onCreate()方法。
- public void callActivityOnCreate(Activity activity, Bundle icicle,
- PersistableBundle persistentState) {
- prePerformCreate(activity);
- activity.performCreate(icicle, persistentState);
- postPerformCreate(activity);
- }
Activity类的performCreate方法代码:
- final void performCreate(Bundle icicle) {
- onCreate(icicle);
- mActivityTransitionState.readState(icicle);
- performCreateCommon();
- }
通过上述代码总结:一个activity启动的时候调用顺序,通过AMS发消息给activityThread,activityThread的Handler对象接收到launch_activity消息后,依次调用ActivityThread.handleLaunchActivity -> ActivityThread.performLaunchActivity ->
Instrumentation.callActivityOnCreate -> Activity.performCreate -> Activity.onCreate。
同理我们看到在第22行调用了activity.performStart; Activity的onStart方法调用和onCreate稍微不同,顺序为
Activity.performStart -> Instrumentation.callActivityOnStart -> Activity.onStart
由此创建了activity,并在该函数末尾return。activity得到之后开始执行onResume
- if (a != null) {
- r.createdConfig = new Configuration(mConfiguration);
- Bundle oldState = r.state;
- handleResumeActivity(r.token, false, r.isForward,
- !r.activity.mFinished && !r.startsNotResumed);
进而调用
ActivityClientRecord r =
performResumeActivity(
token,
clearHide);在performResumeActivity()中通过下列代码
- if (r != null && !r.activity.mFinished) {
- if (clearHide) {
- r.hideForNow = false;
- r.activity.mStartedActivity = false;
- }
- try {
- r.activity.onStateNotSaved();
- r.activity.mFragments.noteStateNotSaved();
- if (r.pendingIntents != null) {
- deliverNewIntents(r, r.pendingIntents);
- r.pendingIntents = null;
- }
- if (r.pendingResults != null) {
- deliverResults(r, r.pendingResults);
- r.pendingResults = null;
- }
- r.activity.performResume();
调用到activity自身的performResume方法;