开机阶段
\frameworks\base\core\java\com\android\internal\os\ZygoteInit.java
public static void main(String[] argv) {
.......
zygoteServer = new ZygoteServer(isPrimaryZygote);
//执行创建SystemServer进程流程
if (startSystemServer) {
Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer);
// {@code r == null} in the parent (zygote) process, and {@code r != null} in the
// child (system_server) process.
if (r != null) {
r.run();
return;
}
}
// The select loop returns early in the child process after a fork and
// loops forever in the zygote.
//调用runSelectLoop方法,开启loop循环,为后面fork子进程做准备
caller = zygoteServer.runSelectLoop(abiList);
点击桌面启动一个进程(pid:5636 包名:com.example.test111)
调用到AMS的startProcess方法
frameworks\base\services\core\java\com\android\server\am\ActivityManagerService.java
@Override
public void startProcess(String processName, ApplicationInfo info, boolean knownToBeDead,
boolean isTop, String hostingType, ComponentName hostingName) {
synchronized (ActivityManagerService.this) {
startProcessLocked(processName, info, knownToBeDead, 0 /* intentFlags */,
new HostingRecord(hostingType, hostingName, isTop),
ZYGOTE_POLICY_FLAG_LATENCY_SENSITIVE, false /* allowWhileBooting */,
false /* isolated */);
}
} finally {
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
}
@GuardedBy("this")
final ProcessRecord startProcessLocked(String processName,
ApplicationInfo info, boolean knownToBeDead, int intentFlags,
HostingRecord hostingRecord, int zygotePolicyFlags, boolean allowWhileBooting,
boolean isolated) {
return mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags,
hostingRecord, zygotePolicyFlags, allowWhileBooting, isolated, 0 /* isolatedUid */,
false /* isSdkSandbox */, 0 /* sdkSandboxClientAppUid */,
null /* sdkSandboxClientAppPackage */,
null /* ABI override */, null /* entryPoint */,
null /* entryPointArgs */, null /* crashHandler */);
}
调用到ProcessList.java的startProcessLocked方法
frameworks\base\services\core\java\com\android\server\am\ProcessList.java
@GuardedBy("mService")
ProcessRecord startProcessLocked(String processName, ApplicationInfo info,
boolean knownToBeDead, int intentFlags, HostingRecord hostingRecord,
int zygotePolicyFlags, boolean allowWhileBooting, boolean isolated, int isolatedUid,
boolean isSdkSandbox, int sdkSandboxUid, String sdkSandboxClientAppPackage,
String abiOverride, String entryPoint, String[] entryPointArgs, Runnable crashHandler) {
long startTime = SystemClock.uptimeMillis();
ProcessRecord app;
if (!isolated) {
//通过包名获取ProcessRecord
app = getProcessRecordLocked(processName, info.uid);
......
//app获取为null
if (app == null) {
if("com.example.test111".equals(processName)){
Log.i("XXXX","ProcessList newProcessRecordLocked here");
}
//通过包名创建一个新的ProcessRecord对象
app = newProcessRecordLocked(info, processName, isolated, isolatedUid, isSdkSandbox,
......
final boolean success =
startProcessLocked(app, hostingRecord, zygotePolicyFlags, abiOverride);
return success ? app : null;
}
@GuardedBy("mService")
boolean startProcessLocked(HostingRecord hostingRecord, String entryPoint, ProcessRecord app,
int uid, int[] gids, int runtimeFlags, int zygotePolicyFlags, int mountExternal,
String seInfo, String requiredAbi, String instructionSet, String invokeWith,
long startUptime, long startElapsedTime) {
.......
try {
.......
final Process.ProcessStartResult startResult = startProcess(hostingRecord,
entryPoint, app,
uid, gids, runtimeFlags, zygotePolicyFlags, mountExternal, seInfo,
requiredAbi, instructionSet, invokeWith, startUptime);
handleProcessStartedLocked(app, startResult.pid, startResult.usingWrapper,
startSeq, false);
UnionManagerServiceFactory.getInstance().getUnionLocalService().preforkStart(app.processName);
......
private Process.ProcessStartResult startProcess(HostingRecord hostingRecord, String entryPoint,
ProcessRecord app, int uid, int[] gids, int runtimeFlags, int zygotePolicyFlags,
int mountExternal, String seInfo, String requiredAbi, String instructionSet,
String invokeWith, long startTime) {
......
//一大堆判断app的信息:hasAppStorage targetPackagesList usesWebviewZygote
......
regularZygote = true;
startResult = Process.start(entryPoint,
app.processName, uid, uid, gids, runtimeFlags, mountExternal,
app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet,
app.info.dataDir, invokeWith, app.info.packageName, zygotePolicyFlags,
isTopApp, app.getDisabledCompatChanges(), pkgDataInfoMap,
allowlistedAppDataInfoMap, bindMountAppsData, bindMountAppStorageDirs,
new String[]{PROC_START_SEQ_IDENT + app.getStartSeq()});
// By now the process group should have been created by zygote.
app.mProcessGroupCreated = true;
.......
return startResult;
......
}
调用到Process的start方法,创建了一个ZygoteProcess对象并调用start方法
frameworks\base\core\java\android\os\Process.java
public static ProcessStartResult start(
.....){
return ZYGOTE_PROCESS.start(processClass, niceName, uid, gid, gids,
runtimeFlags, mountExternal, targetSdkVersion, seInfo,
abi, instructionSet, appDataDir, invokeWith, packageName,
zygotePolicyFlags, isTopApp, disabledCompatChanges,
pkgDataInfoMap, whitelistedDataInfoMap, bindMountAppsData,
bindMountAppStorageDirs, zygoteArgs);
}
public static final ZygoteProcess ZYGOTE_PROCESS = new ZygoteProcess();
frameworks\base\core\java\android\os\ZygoteProcess.java
public final Process.ProcessStartResult start(......){
.......
try {
return startViaZygote(processClass, niceName, uid, gid, gids,
runtimeFlags, mountExternal, targetSdkVersion, seInfo,
abi, instructionSet, appDataDir, invokeWith, /*startChildZygote=*/ false,
packageName, zygotePolicyFlags, isTopApp, disabledCompatChanges,
pkgDataInfoMap, allowlistedDataInfoList, bindMountAppsData,
bindMountAppStorageDirs, zygoteArgs);
} catch (ZygoteStartFailedEx ex) {
Log.e(LOG_TAG,
"Starting VM process through Zygote failed");
throw new RuntimeException(
"Starting VM process through Zygote failed", ex);
}
}
private Process.ProcessStartResult startViaZygote(......){
//添加一些参数
......
synchronized(mLock) {
Log.i("XXXX","ZygoteProcess zygoteSendArgsAndGetResult start here");
// The USAP pool can not be used if the application will not use the systems graphics
// driver. If that driver is requested use the Zygote application start path.
return zygoteSendArgsAndGetResult(openZygoteSocketIfNeeded(abi),
zygotePolicyFlags,
argsForZygote);
//openZygoteSocketIfNeeded 尝试打开Socket,并连接到Zygote
//argsForZygote 需要创建进程的信息
}
}
private Process.ProcessStartResult zygoteSendArgsAndGetResult(
ZygoteState zygoteState, int zygotePolicyFlags, @NonNull ArrayList<String> args)
throws ZygoteStartFailedEx {
......
return attemptZygoteSendArgsAndGetResult(zygoteState, msgStr);
}
private Process.ProcessStartResult attemptZygoteSendArgsAndGetResult(
ZygoteState zygoteState, String msgStr) throws ZygoteStartFailedEx {
try {
//BufferedWriter和DataInputStream 将数据写入zygote
final BufferedWriter zygoteWriter = zygoteState.mZygoteOutputWriter;
final DataInputStream zygoteInputStream = zygoteState.mZygoteInputStream;
zygoteWriter.write(msgStr);
zygoteWriter.flush();
Log.i("XXXX","ZygoteProcess attemptZygoteSendArgsAndGetResult");
// Always read the entire result from the input stream to avoid leaving
// bytes in the stream for future process starts to accidentally stumble
// upon.
//通过zygoteInputStream 读取到Zygote 创建的进程的pid
Process.ProcessStartResult result = new Process.ProcessStartResult();
result.pid = zygoteInputStream.readInt();
result.usingWrapper = zygoteInputStream.readBoolean();
if (result.pid < 0) {
throw new ZygoteStartFailedEx("fork() failed");
}
return result;
} catch (IOException ex) {
zygoteState.close();
Log.e(LOG_TAG, "IO Exception while communicating with Zygote - "
+ ex.toString());
throw new ZygoteStartFailedEx(ex);
}
}
开机过程中已经启动ZygoteServer的runSelectLoop方法并创建ZygoteConnection
frameworks\base\core\java\com\android\internal\os\ZygoteServer.java
ZygoteConnection connection = peers.get(pollIndex);
boolean multipleForksOK = !isUsapPoolEnabled()
&& ZygoteHooks.isIndefiniteThreadSuspensionSafe();
final Runnable command =
connection.processCommand(this, multipleForksOK);
\frameworks\base\core\java\com\android\internal\os\ZygoteConnection.java
Runnable processCommand(ZygoteServer zygoteServer, boolean multipleOK) {
ZygoteArguments parsedArgs;
try (ZygoteCommandBuffer argBuffer = new ZygoteCommandBuffer(mSocket)) {
while (true) {
try {
parsedArgs = ZygoteArguments.getInstance(argBuffer);
// Keep argBuffer around, since we need it to fork.
} catch (IOException ex) {
throw new IllegalStateException("IOException on command socket", ex);
}
读取到写入的数据
......
//数据格式校验
......
if (parsedArgs.mInvokeWith != null || parsedArgs.mStartChildZygote
|| !multipleOK || peer.getUid() != Process.SYSTEM_UID) {
//Zygote.forkAndSpecialize 特殊方法
//这个方法会有两个返回值,一个在子进程
//一个在父进程
pid = Zygote.forkAndSpecialize(parsedArgs.mUid, parsedArgs.mGid,
parsedArgs.mGids, parsedArgs.mRuntimeFlags, rlimits,
parsedArgs.mMountExternal, parsedArgs.mSeInfo, parsedArgs.mNiceName,
fdsToClose, fdsToIgnore, parsedArgs.mStartChildZygote,
parsedArgs.mInstructionSet, parsedArgs.mAppDataDir,
parsedArgs.mIsTopApp, parsedArgs.mPkgDataInfoList,
parsedArgs.mAllowlistedDataInfoList, parsedArgs.mBindMountAppDataDirs,
parsedArgs.mBindMountAppStorageDirs);
......
//子进程中
if (pid == 0) {
// in child
Log.i("XXXX","ZygoteConnection.java zygoteServer.setForkChild(); here");
zygoteServer.setForkChild();
zygoteServer.closeServerSocket();
IoUtils.closeQuietly(serverPipeFd);
serverPipeFd = null;
return handleChildProc(parsedArgs, childPipeFd,
parsedArgs.mStartChildZygote);
} else {
//父进程
// In the parent. A pid < 0 indicates a failure and will be handled in
// handleParentProc.
Log.i("XXX","ZygoteConnection.java parent here");
IoUtils.closeQuietly(childPipeFd);
childPipeFd = null;
handleParentProc(pid, serverPipeFd);
return null;
}
private Runnable handleChildProc(ZygoteArguments parsedArgs,
FileDescriptor pipeFd, boolean isZygote) {
if (!isZygote) {
//zygote进程初始化
return ZygoteInit.zygoteInit(parsedArgs.mTargetSdkVersion,
parsedArgs.mDisabledCompatChanges,
parsedArgs.mRemainingArgs, null /* classLoader */);
} else {
//子进程初始化
return ZygoteInit.childZygoteInit(
parsedArgs.mRemainingArgs /* classLoader */);
}
frameworks\base\core\java\com\android\internal\os\ZygoteInit.java
static Runnable childZygoteInit(String[] argv) {
Log.i("XXX","childZygoteInit");
RuntimeInit.Arguments args = new RuntimeInit.Arguments(argv);
return RuntimeInit.findStaticMain(args.startClass, args.startArgs, /* classLoader= */null);
}
//创建app进程对应的ActivityThread并执行Main方法
Log打印:
S00D9E1 07-10 18:32:22.316 1102 1648 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN
cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.test111/.MainActivity
bnds=[360,1008][532,1256]} with LAUNCH_MULTIPLE from uid 10164 pid 1715 (BAL_ALLOW_ALLOWLISTED_COMPONENT) result code=START_SUCCESS
S00DA46 07-10 18:32:22.399 1102 1138 V ActivityManager: Clearing bad process: 10202/com.example.test111
S00DA47 07-10 18:32:22.399 1102 1138 V ActivityManager: startProcess: name=com.example.test111 app=null knownToBeDead=false thread=null pid=-1
S00DA72 07-10 18:32:22.436 1102 1138 V ActivityManager: startProcess: name=com.example.test111 app=ProcessRecord{26e8bfd 0:com.example.test111/u0a202} knownToBeDead=false thread=null pid=0
M00DA74 07-10 18:32:22.436 1102 1138 I XXXXX: AMS startProcessLocked
M00DA75 07-10 18:32:22.436 1102 1138 I XXXXX: ProcessList startProcessLocked 1
M00DA78 07-10 18:32:22.437 1102 1138 I XXXXX: ProcessList startProcessLocked 2
S00DA7A 07-10 18:32:22.438 1102 1138 V WindowManager: Stopping ActivityRecord{787eb1c u0 com.android.launcher3/.Launcher3QuickStepGo t7 d0}: nowVisible=true animating=true finishing=false
M00DA7F 07-10 18:32:22.442 1102 1149 I XXXXX: ProcessList UnionManagerServiceFactory.getInstance().getUnionLocalService()
M00DA80 07-10 18:32:22.442 1102 1149 I XXXXX: ProcessList Process.start here
M00DA81 07-10 18:32:22.443 1102 1149 I XXXXX: ZygoteProcess Process.ProcessStartResult start
M00DA82 07-10 18:32:22.443 1102 1149 I XXXXX: ZygoteProcess startViaZygote
M00DA83 07-10 18:32:22.443 1102 1149 I XXXXX: ZygoteProcess zygoteSendArgsAndGetResult start here
M00DA84 07-10 18:32:22.444 1102 1149 I XXXXX: ZygoteProcess openZygoteSocketIfNeeded
M00DA8A 07-10 18:32:22.444 1102 1149 I XXXXX: ZygoteProcess attemptZygoteSendArgsAndGetResult
S00DACB 07-10 18:32:22.480 1102 1648 D WindowManager: relayoutWindow: Window=Window{40e466 u0 Splash Screen com.example.test111}, [type=3]*noSurface ,oldVis=0, newVis=0, focusMayChange=true, flagChanges & FLAG_NOT_FOCUSABLE = 0, !win.mRelayoutCalled = false
S00DACC 07-10 18:32:22.481 1102 1648 D WindowManager: resetDrawState: mDrawState=0 ,mWin=Window{40e466 u0 Splash Screen com.example.test111}, [type=3]*noSurface com.android.server.wm.WindowStateAnimator.createSurfaceLocked:335 com.android.server.wm.WindowManagerService.createSurfaceControl:2831 com.android.server.wm.WindowManagerService.relayoutWindow:2564
S00DACD 07-10 18:32:22.488 1102 1648 V WindowManager: computeShownFrameLocked: mAlpha=1.0 ,mShownAlpha=0.0 ,mLastAlpha=0.0 ,mLastHidden=true ,mWin=Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3]
S00DAE4 07-10 18:32:22.496 1102 1648 I WindowManager: Input focus has changed to null from 374a163 com.android.launcher3/com.android.launcher3.Launcher3QuickStepGo mDisplayId 0 updateInputWindows true
S00DAE5 07-10 18:32:22.497 1102 1648 I WindowManager: Input focus has changed to null, mInputFocus=null, focus=null, mDisplayId=0, updateInputWindows=true, callers=com.android.server.wm.DisplayContent.updateFocusedWindowLocked:4250 com.android.server.wm.RootWindowContainer.updateFocusedWindowLocked:500 com.android.server.wm.WindowManagerService.updateFocusedWindowLocked:6453 com.android.server.wm.WindowManagerService.relayoutWindow:2646 com.android.server.wm.Session.relayout:249
M00DAE7 07-10 18:32:22.502 1381 1449 D VRI[test111]: relayoutWindow: maybeSyncSeqId=-1, relayoutResult=3, mLastSyncSeqId=0, mRelayoutSeq=1
M00DAE9 07-10 18:32:22.508 1381 1449 D VRI[test111]: reportNextDraw: reason=first_relayoutandroid.view.ViewRootImpl.performTraversals:3992 android.view.ViewRootImpl.doTraversal:2640 android.view.ViewRootImpl$TraversalRunnable.run:9766 android.view.Choreographer$CallbackRecord.run:1399 android.view.Choreographer$CallbackRecord.run:1408
M00DAEA 07-10 18:32:22.509 1381 1449 D VRI[test111]: Setup new sync = wmsSync-VRI[test111]#22, seqId =0
M00DAEB 07-10 18:32:22.509 1381 1449 D VRI[test111]: Creating new active sync group VRI[test111]#23
M00DAFA 07-10 18:32:22.511 588 588 D Zygote : Forked child process 5394
S00DB02 07-10 18:32:22.515 1102 1149 W ActivityManager: Slow operation: 102ms so far, now at startProcess: returned from zygote!
E00DB05 07-10 18:32:22.517 1102 1149 I am_proc_start: [0,5394,10202,com.example.test111,next-top-activity,{com.example.test111/com.example.test111.MainActivity}]
S00DB07 07-10 18:32:22.517 1102 1149 I ActivityManager: Start proc 5394:com.example.test111/u0a202 for next-top-activity {com.example.test111/com.example.test111.MainActivity}
S00DB0A 07-10 18:32:22.518 1102 1149 D ActivityManager: ProcessRecord{26e8bfd 5394:com.example.test111/u0a202} setPendingStart=false callers=com.android.server.am.ProcessList.handleProcessStartedLocked:2863 com.android.server.am.UnisocProcessList.handleProcessStartedLocked:360 com.android.server.am.ProcessList.handleProcessStartedLocked:2790 com.android.server.am.ProcessList.lambda$handleProcessStart$1:2150 com.android.server.am.ProcessList.$r8$lambda$swBGAihsWK-ua7Y-9peg-di3_lY:0 com.android.server.am.ProcessList$$ExternalSyntheticLambda1.run:0 com.android.server.am.ProcessList.handleProcessStart:2178 com.android.server.am.ProcessList.lambda$startProcessLocked$0:2100 com.android.server.am.ProcessList.$r8$lambda$RYfds-QGIevfi1LguTPr20cBG60:0 com.android.server.am.ProcessList$$ExternalSyntheticLambda5.run:0
M00DB30 07-10 18:32:22.546 1381 2025 D VRI[test111]: Received frameDrawingCallback syncResult=0 frameNum=1.
M00DB31 07-10 18:32:22.547 1381 2025 D VRI[test111]: onFrameDraw:Setting up sync and frameCommitCallback syncBuffer = false ,frameNum = 1
M00DB36 07-10 18:32:22.552 1381 1496 D VRI[test111]: Received frameCommittedCallback lastAttemptedDrawFrameNum=1 didProduceBuffer=true
M00DB37 07-10 18:32:22.552 1381 1496 D SurfaceSyncGroup: markSyncReady VRI[test111]#23, mPendingSyncs=true, mHasWMSync=false, callers=android.view.ViewRootImpl$8.lambda$onFrameDraw$1:11932 android.view.ViewRootImpl$8.$r8$lambda$6frSHsGsDhUEo8Wl9hChpniTVZ0:0 android.view.ViewRootImpl$8$$ExternalSyntheticLambda1.onFrameCommit:9 android.view.ThreadedRenderer$1.lambda$onFrameDraw$0:730 android.view.ThreadedRenderer$1$$ExternalSyntheticLambda0.onFrameCommit:2
M00DB3A 07-10 18:32:22.555 1381 1449 D VRI[test111]: reportDrawFinished: seqId = 0,caller: android.view.ViewRootImpl.lambda$createSyncIfNeeded$4:4116 android.view.ViewRootImpl.$r8$lambda$0OnJAzMm2K4jsQv4DVvoHceH0NI:0 android.view.ViewRootImpl$$ExternalSyntheticLambda15.accept:6 android.window.SurfaceSyncGroup.lambda$new$1:208 android.window.SurfaceSyncGroup.$r8$lambda$oYIkPleMpLwuM835WvsLg35IK4U:0
S00DB50 07-10 18:32:22.565 1102 1377 D WindowManager: finishDrawingLocked: merge with mWin.mSyncTransaction!!! ,mWin = Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3] ,inputHandle = 40e466 Splash Screen com.example.test111, frame=[0,0,0,0], touchableRegion=SkRegion((0,0,720,1600)), scaleFactor=1.0, transform=null, windowToken=android.os.BinderProxy@97164c1, displayId=0, isClone=false, packageName=com.example.test111, ownerPid=1381, touchableRegionSurfaceControl=java.lang.ref.WeakReference@934fe25, replaceTouchableRegionWithCrop=false, changed=false
S00DB54 07-10 18:32:22.569 1102 1139 V WindowManager: performShow on Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3]: mDrawState=READY_TO_SHOW readyForDisplay=false starting=true during animation: policyVis=true parentHidden=false tok.visibleRequested=true tok.visible=false animating=false tok animating=false mViewVisibility=0 mDestroying=false mHidden=true mAttrs.type=3 mSyncState=2 mPrepareSyncSeqId=0 mSyncSeqId=1 mLastAlpha=1.0 mLastHidden=true Callers=com.android.server.wm.WindowState.performShowLocked:4506 com.android.server.wm.WindowStateAnimator.commitFinishDrawingLocked:295 com.android.server.wm.DisplayContent.lambda$new$8:1195 com.android.server.wm.DisplayContent.$r8$lambda$NJwM1ysKPNyOazqyI2QXlp2I4yA:0
S00DB55 07-10 18:32:22.570 1102 1139 D Transition: applyReady: Set transition ready, mSyncId = 8, callers = com.android.server.wm.Transition.setReady:856 com.android.server.wm.TransitionController.setReady:894 com.android.server.wm.TransitionController.setReady:899 com.android.server.wm.DisplayContent.executeAppTransition:6003 com.android.server.wm.ActivityRecord.onStartingWindowDrawn:7032 com.android.server.wm.WindowState.performShowLocked:4514
S00DB56 07-10 18:32:22.574 1102 1139 D ActivityTaskManager: TaskFragment isSyncFinished(group) = true, isReadyToTransit = true, this = Task{b5f9a78 #8 type=standard A=10202:com.example.test111}, group = com.android.server.wm.BLASTSyncEngine$SyncGroup@c300408
S00DB57 07-10 18:32:22.576 1102 1139 D Transition: set Visible for ActivityRecord, ar = ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}caller :com.android.server.wm.Transition.onTransactionReady:1553 com.android.server.wm.BLASTSyncEngine$SyncGroup.finishNow:263 com.android.server.wm.BLASTSyncEngine$SyncGroup.tryFinish:202 com.android.server.wm.BLASTSyncEngine$SyncGroup.-$$Nest$mtryFinish:0 com.android.server.wm.BLASTSyncEngine.onSurfacePlacement:552
S00DB58 07-10 18:32:22.578 1102 1139 V WindowManager: performShow on Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3]: mDrawState=READY_TO_SHOW readyForDisplay=true starting=true during animation: policyVis=true parentHidden=false tok.visibleRequested=true tok.visible=true animating=false tok animating=false mViewVisibility=0 mDestroying=false mHidden=true mAttrs.type=3 mSyncState=0 mPrepareSyncSeqId=0 mSyncSeqId=1 mLastAlpha=1.0 mLastHidden=true Callers=com.android.server.wm.WindowState.performShowLocked:4506 com.android.server.wm.WindowStateAnimator.commitFinishDrawingLocked:295 com.android.server.wm.WindowState.commitFinishDrawing:4477 com.android.server.wm.ActivityRecord.commitFinishDrawing:5886
S00DB59 07-10 18:32:22.578 1102 1139 V WindowManager: Showing Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3]: mDrawState=READY_TO_SHOW readyForDisplay=true starting=true during animation: policyVis=true parentHidden=false tok.visibleRequested=true tok.visible=true animating=false tok animating=false Callers=com.android.server.wm.WindowState.performShowLocked:4532 com.android.server.wm.WindowStateAnimator.commitFinishDrawingLocked:295 com.android.server.wm.WindowState.commitFinishDrawing:4477 com.android.server.wm.ActivityRecord.commitFinishDrawing:5886
S00DB5A 07-10 18:32:22.581 1102 1139 D WindowManager: performShowLocked: mDrawState=HAS_DRAWN in Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3] com.android.server.wm.WindowStateAnimator.commitFinishDrawingLocked:295 com.android.server.wm.WindowState.commitFinishDrawing:4477 com.android.server.wm.ActivityRecord.commitFinishDrawing:5886
S00DB5B 07-10 18:32:22.582 1102 1139 V WindowManager: Start show Surface(name=Splash Screen com.example.test111#101)/@0xc9a25ec, shown=false, alpha=1.0, windowType=3 ,win=Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3], inputHandle = 40e466 Splash Screen com.example.test111, frame=[0,0,0,0], touchableRegion=SkRegion((0,0,720,1600)), scaleFactor=1.0, transform=null, windowToken=android.os.BinderProxy@97164c1, displayId=0, isClone=false, packageName=com.example.test111, ownerPid=1381, touchableRegionSurfaceControl=java.lang.ref.WeakReference@934fe25, replaceTouchableRegionWithCrop=false, changed=false
S00DB5C 07-10 18:32:22.582 1102 1139 V WindowManager: Showing Surface(name=Splash Screen com.example.test111#101)/@0xc9a25ec, shown=false, alpha=1.0, windowType=3 ,win=Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3] during relayout
S00DB62 07-10 18:32:22.594 1102 1135 V WindowManager: Sent Transition #8 createdAt=07-10 18:32:22.265 via request=TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=0 taskId=8 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.test111/.MainActivity } baseActivity=ComponentInfo{com.example.test111/com.example.test111.MainActivity} topActivity=ComponentInfo{com.example.test111/com.example.test111.MainActivity} origActivity=null realActivity=ComponentInfo{com.example.test111/com.example.test111.MainActivity} numActivities=1 lastActiveTime=108059 supportsMultiWindow=false resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{28e7a7f Task{b5f9a78 #8 type=standard A=10202:com.example.test111}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 66 - 0, 0) topActivityInfo=ActivityInfo{cb3bfdb com.example.test111.MainActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isSleeping=false topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= false topActivityLetterboxed= false isFromDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 locusId=null displayAreaFeatureId=1 cameraCompatControlState=hidden}, remoteTransition = null, displayChange = null }
M00DB82 07-10 18:32:22.609 5394 5394 I example.test111: Late-enabling -Xcheck:jni
M00DB86 07-10 18:32:22.627 663 663 I Layer : fillInputInfo layer:a62d4de ActivityRecordInputSink com.example.test111/.MainActivity#105, visible=1 (hasInputInfo:1, isHidden:0, alpha:0.000000, parent:ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}#99,parenthidden:0, parentalpha:0.000000, mBuffer:0, mSidebandStream:0,hasSomethingToDraw:0, hasEffect:0, fillsColor:0, drawShadows:0, hasBlur:0)
M00DBC4 07-10 18:32:22.691 663 663 I Layer : fillInputInfo layer:Splash Screen com.example.test111#101, visible=1 (hasInputInfo:1, isHidden:0, alpha:0.069641, parent:40e466 Splash Screen com.example.test111#100,parenthidden:0, parentalpha:0.069641, mBuffer:1, mSidebandStream:0,hasSomethingToDraw:1, hasEffect:0, fillsColor:0, drawShadows:0, hasBlur:0)
M00DC10 07-10 18:32:22.803 5394 5394 I example.test111: Using CollectorTypeCMC GC.
M00DC25 07-10 18:32:22.894 5394 5394 I XXXXX: ActivityThread.java main
S00DC26 07-10 18:32:22.895 5394 5394 I ActivityThread: ActivityThread main entered
S00DC27 07-10 18:32:22.910 5394 5394 I ActivityThread: process request to attach: startSeq=91
E00DC9B 07-10 18:32:23.044 1102 1931 I am_proc_bound: [0,5394,com.example.test111]
S00DCA5 07-10 18:32:23.059 1102 1931 D ActivityTaskManager: Add ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0} to ProcessRecord{26e8bfd 5394:com.example.test111/u0a202} mInactiveActivities=null callers:com.android.server.wm.ActivityRecord.setProcess:2387 com.android.server.wm.ActivityTaskSupervisor.realStartActivityLocked:818 com.android.server.wm.RootWindowContainer$AttachApplicationHelper.test:3850 com.android.server.wm.RootWindowContainer$AttachApplicationHelper.test:3800 com.android.server.wm.ActivityRecord.forAllActivities:4872
S00DCA6 07-10 18:32:23.062 1102 1931 V ActivityTaskManager: Launching: ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0} savedState=null with results=null newIntents=null andResume=true
E00DCA7 07-10 18:32:23.062 1102 1931 I wm_restart_activity: [0,122383385,8,com.example.test111/.MainActivity]
S00DCA8 07-10 18:32:23.063 1102 1931 I AppsFilter: interaction: PackageSetting{e3d5a80 com.example.test111/10202} -> PackageSetting{b2b8b9 com.android.launcher3/10164} BLOCKED
S00DCA9 07-10 18:32:23.064 1102 1931 I ActivityTaskManager: delivered LaunchActivityItem: ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}
S00DCAA 07-10 18:32:23.065 1102 1931 V WindowManager: Moving to RESUMED: ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0} (starting new instance) callers=com.android.server.wm.ActivityTaskSupervisor.realStartActivityLocked:1003 com.android.server.wm.RootWindowContainer$AttachApplicationHelper.test:3850 com.android.server.wm.RootWindowContainer$AttachApplicationHelper.test:3800 com.android.server.wm.ActivityRecord.forAllActivities:4872 com.android.server.wm.WindowContainer.forAllActivities:1841
S00DCAB 07-10 18:32:23.065 1102 1931 V WindowManager: State movement: ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0} from:INITIALIZING to:RESUMED reason:minimalResumeActivityLocked
M00DCAC 07-10 18:32:23.065 1102 1931 D gamemode: setResumedActivityUncheckLocked ---> com.example.test111
S00DCAD 07-10 18:32:23.072 1102 1931 D WindowManager: setFocusedApp mFocusedApp = ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}displayId = 0Callers = com.android.server.wm.ActivityTaskManagerService.setLastResumedActivityUncheckLocked:4932 com.android.server.wm.ActivityTaskSupervisor.updateTopResumedActivityIfNeeded:2416 com.android.server.wm.TaskFragment.setResumedActivity:539 com.android.server.wm.TaskFragment.onActivityStateChanged:835
M00DCAE 07-10 18:32:23.072 1102 1931 D InputDispatcher: setFocusedApplication displayId=0 ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}
S00DCAF 07-10 18:32:23.072 1102 1931 D WindowManager: Enter findFocusedWindowIfNeeded ,topFocusedDisplayId = -1, mPerDisplayFocusEnabled = false,FLAG_OWN_FOCUS = false,(topFocusedDisplayId == INVALID_DISPLAY) = true, this = Display{#0 state=ON size=720x1600 ROTATION_0}
S00DCB0 07-10 18:32:23.077 1102 1931 D WindowManager: Enter findFocusedWindow mTmpWindow = null, mFindFocusedWindow = com.android.server.wm.DisplayContent$$ExternalSyntheticLambda14@d342fc2, display=0, this = Display{#0 state=ON size=720x1600 ROTATION_0}
E00DCB1 07-10 18:32:23.077 1102 1931 I wm_set_resumed_activity: [0,com.example.test111/.MainActivity,minimalResumeActivityLocked - onActivityStateChanged]
S00DCB2 07-10 18:32:23.078 1102 1931 V WindowManager: Sending position change to ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}, onTop: true
S00DCB5 07-10 18:32:23.093 1102 1138 D ActivityManager: Set 5394 com.example.test111 adj 0: top-activity
S00DCB6 07-10 18:32:23.094 1102 1138 D ActivityManager: Proc state change of com.example.test111 to TOP (2): top-activity
S00DCB7 07-10 18:32:23.096 1102 1138 D ActivityManager: updateBatteryStats: comp=ComponentInfo{com.example.test111/com.example.test111.MainActivity}res=true
S00DCB8 07-10 18:32:23.097 1102 1138 D ActivityManager: updateActivityUsageStats: comp=ComponentInfo{com.example.test111/com.example.test111.MainActivity} hash=160793937 event=1
EM00DD52 07-10 18:32:23.513 5394 5394 D nativeloader: Configuring clns-4 for other apk /data/app/~~3Qdw9FUvplaKcSAoKzHShw==/com.example.test111-qQpKs34pmWUcF_eeumy-xA==/base.apk. target_sdk_version=33, uses_libraries=, library_path=/data/app/~~3Qdw9FUvplaKcSAoKzHShw==/com.example.test111-qQpKs34pmWUcF_eeumy-xA==/lib/arm64, permitted_path=/data:/mnt/expand:/data/user/0/com.example.test111
E00DE7F 07-10 18:32:24.274 5394 5394 I wm_on_create_called: [122383385,com.example.test111.MainActivity,performCreate,405]
E00DEAF 07-10 18:32:24.399 5394 5394 I wm_on_start_called: [122383385,com.example.test111.MainActivity,handleStartActivity,37]
E00DEB0 07-10 18:32:24.420 5394 5394 I wm_on_resume_called: [122383385,com.example.test111.MainActivity,RESUME_ACTIVITY,10]
S00DEBC 07-10 18:32:24.479 1102 5317 V WindowManager: addWindow: focusChanged=false ,canReceiveKeys=false, client=android.os.BinderProxy@45f78bc, win=Window{d7e045 u0 com.example.test111/com.example.test111.MainActivity}, [type=1]*noSurface
S00DEBF 07-10 18:32:24.484 1102 1139 D WindowManager: updateInputFocusRequest: focusToken is null, mInputFocus set null., mInputFocus = null, mCurrentFocus = null, mFocusedApp = ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}
S00DEC7 07-10 18:32:24.501 1102 5317 I WindowManager: Resumed activity; dropping state of: ActivityRecord{74b6c19 u0 com.example.test111/.MainActivity t8 d0}
E00DEC8 07-10 18:32:24.502 5394 5394 I wm_on_top_resumed_gained_called: [122383385,com.example.test111.MainActivity,topStateChangedWhenResumed]
S00DEE4 07-10 18:32:24.553 1102 4788 D WindowManager: relayoutWindow: Window=Window{d7e045 u0 com.example.test111/com.example.test111.MainActivity}, [type=1]*noSurface ,oldVis=4, newVis=0, focusMayChange=true, flagChanges & FLAG_NOT_FOCUSABLE = 0, !win.mRelayoutCalled = false
S00DEEF 07-10 18:32:24.566 1102 4788 D WindowManager: Enter findFocusedWindow mTmpWindow = Window{d7e045 u0 com.example.test111/com.example.test111.MainActivity}, [type=1]-[Surface(name=*Title#108)/@0xffa4f9f, shown=false, alpha=0.0, windowType=1], mFindFocusedWindow = com.android.server.wm.DisplayContent$$ExternalSyntheticLambda14@d342fc2, display=0, this = Display{#0 state=ON size=720x1600 ROTATION_0}
S00DF03 07-10 18:32:24.579 1102 4788 I WindowManager: Input focus has changed to Window{d7e045 u0 com.example.test111/com.example.test111.MainActivity}, [type=1]-[Surface(name=*Title#108)/@0xffa4f9f, shown=false, alpha=0.0, windowType=1] from 374a163 com.android.launcher3/com.android.launcher3.Launcher3QuickStepGo mDisplayId 0 updateInputWindows true
E00DF09 07-10 18:32:24.584 1102 1139 I input_focus: [Focus request d7e045 com.example.test111/com.example.test111.MainActivity,reason=UpdateInputWindows]
M00DF23 07-10 18:32:24.612 1102 3812 D InputManager: setFocusedWindow:request.windowName is d7e045 com.example.test111/com.example.test111.MainActivity, request.token is 0x783c6eb538, request.displayId is 0
S00DF96 07-10 18:32:24.757 1102 1139 V WindowManager: Showing Surface(name=com.example.test111/com.example.test111.MainActivity#108)/@0xffa4f9f, shown=false, alpha=1.0, windowType=1 ,win=Window{d7e045 u0 com.example.test111/com.example.test111.MainActivity}, [type=1]-[Surface(name=*Title#108)/@0xffa4f9f, shown=false, alpha=0.0, windowType=1] during relayout
S00DF9A 07-10 18:32:24.770 1102 5317 D WindowManager: relayoutWindow: Window=Window{40e466 u0 Splash Screen com.example.test111}, [type=3]-[Surface(name=*Title#101)/@0xc9a25ec, shown=false, alpha=0.0, windowType=3] ,oldVis=0, newVis=0, focusMayChange=false, flagChanges & FLAG_NOT_FOCUSABLE = 0, !win.mRelayoutCalled = false
M00DFA4 07-10 18:32:24.778 1102 3233 I InputDispatcher: request window d7e045 com.example.test111/com.example.test111.MainActivity Focusability::OK
E00DFA6 07-10 18:32:24.779 1102 1226 I input_focus: [Focus entering d7e045 com.example.test111/com.example.test111.MainActivity (server),reason=Window became focusable. Previous reason: NOT_VISIBLE]
E00DFC8 07-10 18:32:24.792 1102 1135 I wm_activity_launch_time: [0,122383385,com.example.test111/.MainActivity,2527] \\launch总耗时
M00DFC9 07-10 18:32:24.792 1102 1135 I ActivityTaskManager: Displayed com.example.test111/.MainActivity for user 0: +2s527ms