美文网首页
Activity-生命周期

Activity-生命周期

作者: lvcs | 来源:发表于2019-08-23 13:27 被阅读0次

ActivityThread调用TransactionExecutor.cycleToPath执行改变当前生命周期状态, 最后由Instrumentation执行具体的Activity生命周期方法

1.Activity相关方法回调

1.1 attach,onCreate

 //ActivityThread
 private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
......
          //调用attach
         activity.attach(appContext, this, getInstrumentation(), r.token,
                  r.ident, app, r.intent, r.activityInfo, title, r.parent,
                  r.embeddedID, r.lastNonConfigurationInstances, config,
                  r.referrer, r.voiceInteractor, window, r.configCallback);
......
         if (r.isPersistable()) {
          //通过Instrumentation调用OnCreate
         mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
         } else {
            mInstrumentation.callActivityOnCreate(activity, r.state);
         }
 }

1.2 onStart

//ActivityThread
public void handleStartActivity(ActivityClientRecord r,
            PendingTransactionActions pendingActions) {
......
        //通过Instrumentation调用OnStart
        activity.performStart("handleStartActivity");
        r.setState(ON_START);
......
    }

//Activity
final void performStart(String reason) {
......
     //通过Instrumentation调用OnStart
     mInstrumentation.callActivityOnStart(this);
......
}

1.3 onResume,上个页面onStop

//ActivityThread
public void handleResumeActivity(IBinder token, boolean finalStateRequest, boolean isForward,
            String reason) {
......
        //通过Instrumentation调用OnResume
        final ActivityClientRecord r = performResumeActivity(token, finalStateRequest, reason);
......
        //等待这个页面执行完毕后 执行上个页面的onStop
        Looper.myQueue().addIdleHandler(new Idler());
......
}

2.TransactionExecutor回调ActivityThread相关方法

//使用事务处理程序初始化实例,该实例将执行所有请求的操作
public TransactionExecutor(ClientTransactionHandler clientTransactionHandler) {
    //clientTransactionHandler为ActivityThread
    mTransactionHandler = clientTransactionHandler;
}

//执行任务
public void execute(ClientTransaction transaction) {
        final IBinder token = transaction.getActivityToken();
        //循环回调请求的所有状态并在适当的时间执行它们(如果有callback 先执行其生命周期回调方法  例: Activity的onCreate,onStart)
        executeCallbacks(transaction);
        //如果有请求,转换到最终状态(生命周期最终回调方法  例:onResume)
        executeLifecycleState(transaction);

        mPendingActions.clear();
    }

 public void executeCallbacks(ClientTransaction transaction) {
 ..........
  //循环执行回调
  for(...){
    final ClientTransactionItem item = callbacks.get(i);
    //执行客户端生命周期方法
    item.execute(mTransactionHandler, token, mPendingActions);
    item.postExecute(mTransactionHandler, token, mPendingActions);
   ..........   
     //客户端状态转换
     cycleToPath(r, postExecutionState, shouldExcludeLastTransition);
    }
 ..........    
    
 }

 private void executeLifecycleState(ClientTransaction transaction) {
..........
   .    //客户端状态转换
        cycleToPath(r, lifecycleItem.getTargetState(), true /* excludeLastState */);
        // 执行最终转换
        lifecycleItem.execute(mTransactionHandler, token, mPendingActions);
        lifecycleItem.postExecute(mTransactionHandler, token, mPendingActions);
..........
 }

//在状态之间转换状态
private void cycleToPath(ActivityClientRecord r, int finish,
            boolean excludeLastState) {
        final int start = r.getLifecycleState();
        final IntArray path = mHelper.getLifecyclePath(start, finish, excludeLastState);
        performLifecycleSequence(r, path);
}

//回调ActivityThread各生命周期方法
private void performLifecycleSequence(ActivityClientRecord r, IntArray path) {
        final int size = path.size();
        for (int i = 0, state; i < size; i++) {
            state = path.get(i);
            log("Transitioning to state: " + state);
            switch (state) {
                case ON_CREATE:
                    mTransactionHandler.handleLaunchActivity(r, mPendingActions,
                            null /* customIntent */);
                    break;
                case ON_START:
                    mTransactionHandler.handleStartActivity(r, mPendingActions);
                    break;
                case ON_RESUME:
                    mTransactionHandler.handleResumeActivity(r.token, false /* finalStateRequest */,
                            r.isForward, "LIFECYCLER_RESUME_ACTIVITY");
                    break;
                case ON_PAUSE:
                    mTransactionHandler.handlePauseActivity(r.token, false /* finished */,
                            false /* userLeaving */, 0 /* configChanges */, mPendingActions,
                            "LIFECYCLER_PAUSE_ACTIVITY");
                    break;
                case ON_STOP:
                    mTransactionHandler.handleStopActivity(r.token, false /* show */,
                            0 /* configChanges */, mPendingActions, false /* finalStateRequest */,
                            "LIFECYCLER_STOP_ACTIVITY");
                    break;
                case ON_DESTROY:
                    mTransactionHandler.handleDestroyActivity(r.token, false /* finishing */,
                            0 /* configChanges */, false /* getNonConfigInstance */,
                            "performLifecycleSequence. cycling to:" + path.get(size - 1));
                    break;
                case ON_RESTART:
                    mTransactionHandler.performRestartActivity(r.token, false /* start */);
                    break;
                default:
                    throw new IllegalArgumentException("Unexpected lifecycle state: " + state);
            }
        }
}

相关文章

网友评论

      本文标题:Activity-生命周期

      本文链接:https://www.haomeiwen.com/subject/bnuzsctx.html