Activity的performPause用于执行ActivityPause,代码如下:
//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 performPause() {
if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) {
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "performPause:"
+ mComponent.getClassName());
}
dispatchActivityPrePaused();
mDoReportFullyDrawn = false;
mFragments.dispatchPause();
mCalled = false;
onPause();
EventLogTags.writeWmOnPausedCalled(mIdent, getComponentName().getClassName(),
"performPause");
mResumed = false;
if (!mCalled && getApplicationInfo().targetSdkVersion
>= android.os.Build.VERSION_CODES.GINGERBREAD) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onPause()");
}
dispatchActivityPostPaused();
Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
}
}
上面方法主要处理如下:
1、调用Activity的dispatchActivityPrePaused方法。
2、调用Activity的onPause方法。
3、调用Activity的dispatchActivityPostPaused方法。
下面分别进行分析:
Activity dispatchActivityPrePaused
调用Activity的dispatchActivityPrePaused方法:
//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 {
private void dispatchActivityPrePaused() {
getApplication().dispatchActivityPrePaused(this);
Object[] callbacks = collectActivityLifecycleCallbacks();
if (callbacks != null) {
for (int i = callbacks.length - 1; i >= 0; i--) {
((Application.ActivityLifecycleCallbacks) callbacks[i]).onActivityPrePaused(this);
}
}
}
}
Activity onPause
在Activity的子类(应用程序实现)的onPause会调用super.onPause()方法:
//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 onPause() {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onPause " + this);
dispatchActivityPaused();
getAutofillClientController().onActivityPaused();
notifyContentCaptureManagerIfNeeded(CONTENT_CAPTURE_PAUSE);
mCalled = true;
}
}
Activity dispatchActivityPaused
调用Activity的dispatchActivityPaused方法:
//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 {
private void dispatchActivityPaused() {
Object[] callbacks = collectActivityLifecycleCallbacks();
if (callbacks != null) {
for (int i = callbacks.length - 1; i >= 0; i--) {
((Application.ActivityLifecycleCallbacks) callbacks[i]).onActivityPaused(this);
}
}
getApplication().dispatchActivityPaused(this);
}
}
Application.ActivityLifecycleCallbacks onActivityPaused
调用Application.ActivityLifecycleCallbacks的onActivityPaused方法,如果应用程序调用了Application的registerActivityLifecycleCallbacks,就会收到onActivityPaused回调。
void onActivityPaused(@NonNull Activity activity):当 Activity 调用 {@link Activity#onPause super.onPause()} 时调用。
Activity dispatchActivityPostPaused
调用Activity的dispatchActivityPostPaused方法:
//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 {
private void dispatchActivityPostPaused() {
Object[] callbacks = collectActivityLifecycleCallbacks();
if (callbacks != null) {
for (int i = callbacks.length - 1; i >= 0; i--) {
((Application.ActivityLifecycleCallbacks) callbacks[i]).onActivityPostPaused(this);
}
}
getApplication().dispatchActivityPostPaused(this);
}
}
Application.ActivityLifecycleCallbacks onActivityPostPaused
调用Application.ActivityLifecycleCallbacks的onActivityPostPaused方法,如果应用程序调用了Application的registerActivityLifecycleCallbacks,就会收到onActivityPostPaused回调。
void onActivityPostPaused(@NonNull Activity activity) :作为暂停活动的最后一步调用。这始终在 {@link Activity#onPause} 之后调用。