App进程创建代码分析(基于Android 14)

在这里插入图片描述
开机阶段

\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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值