从startActivity()到UI对用户可见的过程中发生了什么事情?

我们调用Activity.startActivity()开启一个新的Activity时,AMS会协调整个系统实现资源的准备,最终开启一个Activity的具体操作,还是会调用ActivityThread.handleLaunchActivity()来完成。

 private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) {

        unscheduleGcIdler();
        mSomeActivitiesChanged = true;

        ...

        //Activity.attach()、Activity.setTheme()、Activity.onCreate()、Activity.onStart()、Activity.onRestoreInstanceState()、Activity.onPause()在这里被依次调用,具体的介绍会在Activity生命周期机制进行介绍
        Activity a = performLaunchActivity(r, customIntent);

        if (a != null) {
            r.createdConfig = new Configuration(mConfiguration);
            Bundle oldState = r.state;
            //正常情况下,Activity.onResume()会被调用,如果有需要的话,Activity.onRestart()、Activity.onStart()会在Activity.onResume()之前调用
            handleResumeActivity(r.token, false, r.isForward,
                    !r.activity.mFinished && !r.startsNotResumed);

            ...

        } else {
            try {
                ActivityManagerNative.getDefault()
                    .finishActivity(r.token, Activity.RESULT_CANCELED, null, false);
            } catch (RemoteException ex) {
                // Ignore
            }
        }
    }

Last updated

Was this helpful?