01-10 16:15:02.883 I/ActivityManager( 3402): START u0 {dat=content://mms-sms/conversations/13 cmp=com.android.mms/.ui.ComposeMessageActivity} from uid 10025 on display 0
01-10 16:15:03.305 I/ActivityManager( 3402): Displayed com.android.mms/.ui.ComposeMessageActivity: +395ms
01-10 16:15:03.385 D/OpenGLRenderer( 8158): endAllActiveAnimators on 0x9ba5ca00 (ListView) with handle 0x9b2dcf40
01-10 16:15:03.676 D/ActivityTrigger( 3402): ActivityTrigger activityStopTrigger
01-10 16:15:03.983 I/WindowManager( 3402): Destroying surface Surface(name=com.android.mms/com.android.mms.ui.ConversationList) called by com.android.server.wm.WindowStateAnimator.destroySurface:2014 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881 com.android.server.wm.WindowState.destroyOrSaveSurface:2073 com.android.server.wm.WindowManagerService.tryStartExitingAnimation:3022 com.android.server.wm.WindowManagerService.relayoutWindow:2902 com.android.server.wm.Session.relayout:215 android.view.IWindowSession$Stub.onTransact:286 com.android.server.wm.Session.onTransact:136
01-10 16:15:04.056 D/ActivityTrigger( 3402): ActivityTrigger activityPauseTrigger
android/frameworks/base/services/core/java/com/android/server/wm/WindowSurfaceController.java:157: Slog.i(TAG, "Destroying surface " + this + " called by " + Debug.getCallers(8));
Destroying surface Surface(name=com.android.mms/com.android.mms.ui.ConversationList)
called by
com.android.server.wm.WindowStateAnimator.destroySurface:2014
com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881
com.android.server.wm.WindowState.destroyOrSaveSurface:2073
com.android.server.wm.WindowManagerService.tryStartExitingAnimation:3022
com.android.server.wm.WindowManagerService.relayoutWindow:2902
com.android.server.wm.Session.relayout:215
android.view.IWindowSession$Stub.onTransact:286
com.android.server.wm.Session.onTransact:136
ActivityStack.java
void clearLaunchTime(ActivityRecord r) {
// Make sure that there is no activity waiting for this to launch.
if (mStackSupervisor.mWaitingActivityLaunched.isEmpty()) {
r.displayStartTime = r.fullyDrawnStartTime = 0;
} else {
mStackSupervisor.removeTimeoutsForActivityLocked(r);
mStackSupervisor.scheduleIdleTimeoutLocked(r);
}
}
private void completeResumeLocked(ActivityRecord next) {
// schedule an idle timeout in case the app doesn't do it for us.
mStackSupervisor.scheduleIdleTimeoutLocked(next);
}
frameworks/base/services/core/java/com/android/server/am/
ActivityStackSupervisor.java
case IDLE_TIMEOUT_MSG: {}
case IDLE_NOW_MSG: {}
activityIdleInternal()
final ActivityRecord activityIdleInternalLocked(final IBinder token, boolean fromTimeout,
Configuration config) {
stack.stopActivityLocked(r);
}
ActivityStack.java
final void stopActivityLocked(ActivityRecord r) {
mActivityTrigger.activityStopTrigger(r.intent, r.info, r.appInfo);
EventLogTags.writeAmStopActivity(
r.userId, System.identityHashCode(r), r.shortComponentName);
r.app.thread.scheduleStopActivity(r.appToken, r.visible, r.configChangeFlags);
}
out/target/common/obj/JAVA_LIBRARIES/services.core_intermediates/src/java/com/android/server/am/EventLogTags.java
ActivityTrigger.java
public void activityStopTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) {
ComponentName cn = intent.getComponent();
String activity = null;
Log.d(TAG, "ActivityTrigger activityStopTrigger ");
if (null != cn && null != appInfo)
activity = cn.flattenToString() + "/" + appInfo.versionCode;
native_at_stopActivity(activity);
}
com_android_internal_app_ActivityTrigger.cpp
static void
com_android_internal_app_ActivityTrigger_native_at_stopActivity(JNIEnv *env, jobject clazz, jstring activity)
{
for(size_t i = 0; i < gTotalNumLibs; i++){
if(mDlLibHandlers[i].stopActivity && activity) {
const char *actStr = env->GetStringUTFChars(activity, NULL);
if (NULL != actStr) {
(*mDlLibHandlers[i].stopActivity)(actStr);
env->ReleaseStringUTFChars(activity, actStr);
}
}
}
}
Android 中如何计算 App 的启动时间?
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0105/3830.html
ActivityRecord.java
reportLaunchTimeLocked()