发起Transaction

在分析Activity生命周期回调的源码的时候,我们经常会看到这样的代码

mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(),
        prev.token, PauseActivityItem.obtain(prev.finishing, userLeaving,
                prev.configChangeFlags, pauseImmediately));

通常是由ATMS发起的跨进程调用,触发Activity的生命周期流程的回调,比如onCreate,onResume等

真正的处理函数位于应用进程的ActivityThread类

接受处理

ActivityThread中有一些handle开头的函数,这些函数都是专门来处理从ATMS发来的

handleLaunchActivity
handleConfigurationChanged

具体调用流程请看时序图

时序图

sequenceDiagram participant CT as CT<br>(ClientTransaction) participant AT as AT<br>(ActivityThread) participant H as H<br>(Handler) participant E as E<br>TransactionExecutor participant CTI as CTI<br>(ClientTransactionItem) note over CT: 外部接口ATMS调用<br>getLifecycleManager().<br>scheduleTransaction(transaction) CT ->> CT: setLifecycleStateRequest<br>param:ClientTransaction CT ->> CT: addCallback<br>param:ClientTransaction CT ->> AT: scheduleTransaction<br>通过持有的mClient对象<br>IApplicationThread发起跨进程通信 AT ->> AT: sendMessage<br>发送消息:EXECUTE_TRANSACTION AT ->> H: sendMessage<br>交给Handler处理 H ->> H: handleMessage<br>EXECUTE_TRANSACTION H ->> E: execute E ->> E: executeCallbacks E ->> E: executeLifecycleState E ->> CT: getCallbacks CT -->> E: 返回注册的List<ClientTransactionItem> E ->> CTI:execute E ->> CTI: postExecute CTI ->> AT: 根据ClientTransactionHandler不同的实现类调用不同的接口<br>如handleActivityConfigurationChanged

春风花气馥,秋月寒江湛