跟踪创建流程

跟踪创建流程

ActivityDisplay.createStack --> ActivityDisplay.createStackUnchecked --> ActivityStack.<init> --> ActivityStack.setWindowingMode --> ConfigurationContainer.setWindowingMode --> ActivityStack.onConfigurationChanged --> ActivityStack.onConfigurationChanged --> ActivityDisplay.onStackWindowingModeChanged --> ActivityDisplay.onStackWindowingModeChanged --> ActivityDisplay.addStackReferenceIfNeeded --> ActivityDisplay中mSplitScreenPrimaryStack赋值

ActivityStack.<init> --> ActivityStack.createStackWindowController --> StackWindowController.<init> --> DisplayContent.createStack --> DisplayContent$TaskStackContainers.addStackToDisplay -->  DisplayContent$TaskStackContainers.addStackReferenceIfNeeded  --> DisplayContent中mSplitScreenPrimaryStack不为null,抛出异常

实例化ActivityStack时,ActivityDisplay addStackReferenceIfNeeded 未抛出异常,DisplayContent TaskStackContainers.addStackReferenceIfNeeded时抛出异常

addStack的stack是不同的,一个是对应AM的ActivityStack,一个是WM中的TaskStack,创建是一起创建的,重复时都会抛出异常

但只有在添加TaskStack时才出现异常

07-04 07:49:40.602757  1046  5067 I am_kill : [0,6623,free.vpn.unblock.proxy.turbovpn,0,stop free.vpn.unblock.proxy.turbovpn]
07-04 07:49:40.611611  1046  5067 I am_finish_activity: [0,134240983,15,free.vpn.unblock.proxy.turbovpn/.activity.VpnMainActivity,proc died without state saved]
07-04 07:49:40.617723  1046  5067 I am_remove_task: [15,4]
07-04 07:49:40.835393  1046  1839 I am_crash:
07-04 07:49:41.232665  1046  1119 I wm_task_removed: [15,removeTask]
07-04 07:49:41.234909  1046  1119 I wm_task_removed: [15,removeAppToken: last token]
07-04 07:49:41.236034  1046  1119 I wm_stack_removed: 4

移除流程log中am的task在crash之前已经移除,wm的task和stack在crash之后才删除,添加log证明了ActivityStack先被移除,TaskStack过几百毫秒才被移除

ActivityManagerService.forceStopPackage --> ActivityManagerService.forceStopPackageLocked --> ActivityManagerService.killPackageProcessesLocked --> ActivityManagerService.removeProcessLocked -->
ActivityManagerService.handleAppDiedLocked --> ActivityStackSupervisor.handleAppDiedLocked --> ActivityStack.handleAppDiedLocked --> ActivityStack.removeHistoryRecordsForAppLocked --> ActivityStack.removeActivityFromHistoryLocked --> ActivityStack.removeTask --> ActivityStack.remove --> ActivityStack.removeFromDisplay --> ActivityDisplay.removeChild -->  ActivityDisplay.removeStackReferenceIfNeeded 移除ActivityStack

ActivityStack.handleAppDiedLocked --> ActivityStack.removeHistoryRecordsForAppLocked --> ActivityStack.removeActivityFromHistoryLocked --> ActivityStack.removeTask --> ActivityStack.remove -->
StackWindowController.removeContainer --> TaskStack.removeIfPossible --> WindowContainer.removeImmediately --> DisplayContent$TaskStackContainers.removeChild --> DisplayContent$TaskStackContainers.removeChild -->

--> DisplayContent$TaskStackContainers.removeStackReferenceIfNeeded 移除TaskStack

///反向持锁

ActivityStack.minimalResumeActivityLocked--->
ActivityRecord.completeResumeLocked { mStackSupervisor.wakeUp("turnScreenOnFlag");}--->
ActivityStackSupervisor.wakeUp  -->
         mPowerManager.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_APPLICATION,"android.server.am:TURN_ON:" + reason);
         
PowerManagerService.wakeUp--->wakeUpNoUpdateLocked-->updatePowerStateLocked---> updateDisplayPowerStateLocked--->
DisplayManagerInternal.requestPowerState--->
DisplayManagerService.requestPowerState-->
DisplayPowerController.requestPowerState-->
DisplayPowerController.sendUpdatePowerStateLocked-->H.MSG_UPDATE_POWER_STATE -->
DisplayPowerController.updatePowerState


 在ActivityRecrod代码里面调用了PowerManager.wakeup流程,最终会走到DisplayPowerController里面的updatePowerState流程,其持锁路径是: WMS lLock------>DisplayPowerController.mLock
在updatePowerState调用isForegroundApp,会有如下持锁路径: DisplayPowerController.mLock---->WMS lock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值