activity生命周期从何处调用

73 阅读1分钟

onCreate

由handler机制触发,最终落在了ActivityThread的handleLaunchActivity处

@Override
public Activity handleLaunchActivity(ActivityClientRecord r,
        PendingTransactionActions pendingActions, Intent customIntent) {
       ........

    final Activity a = performLaunchActivity(r, customIntent);

       ........

    return a;
}

performLaunchActivity

private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
   
    ContextImpl appContext = createBaseContextForActivity(r);
    Activity activity = null;
    try {
        java.lang.ClassLoader cl = appContext.getClassLoader();
        activity = mInstrumentation.newActivity(
                cl, component.getClassName(), r.intent);

    } catch (Exception e) {

    }

    try {
        Application app = r.packageInfo.makeApplication(false, mInstrumentation);


        if (activity != null) {
            
           //attach过程还把instrumentation传过去了用于初始化,所以说instrumentation只有一个
            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);

            activity.mCalled = false;
            if (r.isPersistable()) {
                mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
            } else {
                mInstrumentation.callActivityOnCreate(activity, r.state);
            }

    return activity;
}

先是创建activity后来是执行由instrumentation调用的的activity的performCreate,performCreate又调用的onCreate

onStart

public void handleStartActivity(ActivityClientRecord r,
        PendingTransactionActions pendingActions) {

    // Start
    activity.performStart("handleStartActivity");
    r.setState(ON_START);
    
   }
final void performStart(String reason) {

//这里去调用onStart了
    mInstrumentation.callActivityOnStart(this);

    }

其他的都大同小异,就不写了