ActivityThread的handleStartActivity方法用于处理ActivityStart请求,代码如下:
//frameworks/base/core/java/android/app/ActivityThread.java
public final class ActivityThread extends ClientTransactionHandler implements ActivityThreadInternal {
Instrumentation mInstrumentation;
public void handleStartActivity(ActivityClientRecord r,
PendingTransactionActions pendingActions, ActivityOptions activityOptions) {
final Activity activity = r.activity;
if (!r.stopped) {
throw new IllegalStateException("Can't start activity that is not stopped.");
}
if (r.activity.mFinished) {
// TODO(lifecycler): How can this happen?
return;
}
unscheduleGcIdler();
if (activityOptions != null) {
activity.mPendingOptions = activityOptions;
}
// Start
activity.performStart("handleStartActivity");
r.setState(ON_START);
if (pendingActions == null) {
// No more work to do.
return;
}
// Restore instance state
if (pendingActions.shouldRestoreInstanceState()) {
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);
}
}
// Call postOnCreate()
if (pendingActions.shouldCallOnPostCreate()) {
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()");
}
}
updateVisibility(r, true /* show */);
mSomeActivitiesChanged = true;
}
}
上面方法主要处理如下:
1、调用activity的performStart方法。
2、调用Instrumentation的callActivityOnRestoreInstanceState方法。
3、调用Instrumentation的callActivityOnPostCreate方法。
下面分别进行分析:
Activity performStart
调用activity的performStart方法:
Android13 Activity performStart流程分析-CSDN博客
Instrumentation callActivityOnRestoreInstanceState
调用Instrumentation的callActivityOnRestoreInstanceState方法,Instrumentation的callActivityOnRestoreInstanceState方法用于调用还原实例状态时的活动。
//frameworks/base/core/java/android/app/Instrumentation.java
public class Instrumentation {
public void callActivityOnRestoreInstanceState(@NonNull Activity activity,
@NonNull Bundle savedInstanceState) {
activity.performRestoreInstanceState(savedInstanceState);
}
}
Activity performRestoreInstanceState
调用Activity的performRestoreInstanceState方法:
//frameworks/base/core/java/android/app/Activity.java
public class Activity extends ContextThemeWrapper
implements LayoutInflater.Factory2,
Window.Callback, KeyEvent.Callback,
OnCreateContextMenuListener, ComponentCallbacks2,
Window.OnWindowDismissedCallback,
ContentCaptureManager.ContentCaptureClient {
final void performRestoreInstanceState(@NonNull Bundle savedInstanceState) {
onRestoreInstanceState(savedInstanceState);
restoreManagedDialogs(savedInstanceState);
}
}
调用Activity的onRestoreInstanceState方法:
//frameworks/base/core/java/android/app/Activity.java
public class Activity extends ContextThemeWrapper
implements LayoutInflater.Factory2,
Window.Callback, KeyEvent.Callback,
OnCreateContextMenuListener, ComponentCallbacks2,
Window.OnWindowDismissedCallback,
ContentCaptureManager.ContentCaptureClient {
final void performRestoreInstanceState(@NonNull Bundle savedInstanceState) {
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
if (mWindow != null) {
Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);
if (windowState != null) {
mWindow.restoreHierarchyState(windowState);
}
}
}
}
Instrumentation callActivityOnPostCreate
调用Instrumentation的callActivityOnPostCreate方法,Instrumentation的callActivityOnPostCreate方法用于调用Activity的OnCreate方法。
//frameworks/base/core/java/android/app/Instrumentation.java
public class Instrumentation {
public void callActivityOnPostCreate(@NonNull Activity activity,
@Nullable Bundle savedInstanceState) {
activity.onPostCreate(savedInstanceState);
}
}
Activity onPostCreate
调用Activity的onPostCreate方法:
void onPostCreate(@Nullable Bundle savedInstanceState):Activity的界面布局完成后,进行一些进一步初始化操作对UI控件进行调整,该方法在Activity的onCreate()方法执行完毕后调用。
在其子类(应用程序实现)的onPostCreate会调用super.onPostCreate(savedInstanceState)方法:
//frameworks/base/core/java/android/app/Activity.java
public class Activity extends ContextThemeWrapper
implements LayoutInflater.Factory2,
Window.Callback, KeyEvent.Callback,
OnCreateContextMenuListener, ComponentCallbacks2,
Window.OnWindowDismissedCallback,
ContentCaptureManager.ContentCaptureClient {
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
if (!isChild()) {
mTitleReady = true;
onTitleChanged(getTitle(), getTitleColor());
}
mCalled = true;
notifyContentCaptureManagerIfNeeded(CONTENT_CAPTURE_START);
}
}