1:App启动流程

1:ActivityThread

它管理应用程序进程中主线程的执行、调度和执行活动、广播以及活动管理器请求的其他操作

ActivityThread初始化
ActivityThread thread = new ActivityThread();
thread.attach(false, startSeq);

2:获取到Ams调用接口(AIDL方式)

final IActivityManager mgr = ActivityManager.getService();
try {
    mgr.attachApplication(mAppThread, startSeq);
} catch (RemoteException ex) {
    throw ex.rethrowFromSystemServer();
}

3:ActivityManager.getService()的实现类是activityManagerService

切换到ams的实现类中查看attachApplication函数的作用
attachApplicationLocked(thread, callingPid, callingUid, startSeq);

4:bindApplication启动应用中的application

        thread.bindApplication(processName, appInfo, providers,
        instr2.mClass,
        profilerInfo, instr2.mArguments,
        instr2.mWatcher,
        instr2.mUiAutomationConnection, testMode,
        mBinderTransactionTrackingEnabled, enableTrackAllocation,
        isRestrictedBackupMode || !normalMode, app.isPersistent(),
        new Configuration(app.getWindowProcessController().getConfiguration()),
        app.compat, getCommonServicesLocked(app.isolated),
        mCoreSettingsObserver.getCoreSettingsLocked(),
        buildSerial, autofillOptions, contentCaptureOptions);

参考加载
didSomething |= mServices.attachApplicationLocked(app, processName);

 

 

5:ActivityThread内部私有类ApplicationThread

发送handler信息:sendMessage(H.BIND_APPLICATION, data);、

6:ActivityThread内部类H执行

case BIND_APPLICATION:
    Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "bindApplication");
    AppBindData data = (AppBindData)msg.obj;
    handleBindApplication(data);
    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
    break;

7:创建Instrumentation,然后通过Instrumentation加载application

用于实现应用程序检测代码的基类。当启用了instrumentation时,将在任何应用程序代码之前为您实例化该类,从而允许您监视系统与应用程序的所有交互。仪器通过AndroidManifest.xml文件“instrumentation标记”。

mInstrumentation.onCreate(data.instrumentationArgs);

 

执行应用程序{@link application#onCreate}方法的调用。默认实现只是调用该方法。

<p>注意:此方法将在{@link#onCreate(Bundle)}之后立即调用。

通常,插装测试在onCreate()中启动它们的测试线程;您需要小心这些线程之间的争用。(好吧,在它和其他东西之间,但是让我们从这里开始。)

mInstrumentation.callApplicationOnCreate(app);

 

8:ActivityStackSupervisor

启动Activity的函数:realStartActivityLocked

if (mStackSupervisor.attachApplicationLocked(app)) {
    didSomething = true;
}
if (realStartActivityLocked(activity, app,
        top == activity /* andResume */, true /* checkConfig */)) {
    didSomething = true;
}

realStartActivityLocked中的执行函数
//此处添加LauncheActivityItem
clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),        System.identityHashCode(r), r.info,        // TODO: Have this take the merged configuration instead of separate global        // and override configs.        mergedConfiguration.getGlobalConfiguration(),        mergedConfiguration.getOverrideConfiguration(), r.compat,        r.launchedFromPackage, task.voiceInteractor, app.repProcState, r.icicle,        r.persistentState, results, newIntents, mService.isNextTransitionForward(),        profilerInfo));
//此处添加ResumeActivityItem
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
    lifecycleItem = ResumeActivityItem.obtain(mService.isNextTransitionForward());
} else {
    lifecycleItem = PauseActivityItem.obtain();
}
clientTransaction.setLifecycleStateRequest(lifecycleItem);
// Schedule transaction.调用ClientLifecycleManager中的函数
mService.getLifecycleManager().scheduleTransaction(clientTransaction);

9:ClientLifecycleManager

transaction.schedule();

 

10:ClientTransaction

public void schedule() throws RemoteException {
    mClient.scheduleTransaction(this);
}

11:ActivityThread内部私有类ApplicationThread

@Override
public void scheduleTransaction(ClientTransaction transaction) throws RemoteException {
    ActivityThread.this.scheduleTransaction(transaction);
}

12:ActivityThread的父类ClientTransactionHandler

/** Prepare and schedule transaction for execution. */
void scheduleTransaction(ClientTransaction transaction) {
    transaction.preExecute(this);
    sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
}

13:ActivityThread内部类H

case EXECUTE_TRANSACTION:
    final ClientTransaction transaction = (ClientTransaction) msg.obj;
    mTransactionExecutor.execute(transaction);
    if (isSystem()) {
        // Client transactions inside system process are recycled on the client side
        // instead of ClientLifecycleManager to avoid being cleared before this
        // message is handled.
        transaction.recycle();
    }
    // TODO(lifecycler): Recycle locally scheduled transactions.
    break;

14:TransactionExecutor:

public void execute(ClientTransaction transaction) {
    final IBinder token = transaction.getActivityToken();
    log("Start resolving transaction for client: " + mTransactionHandler + ", token: " + token);
    executeCallbacks(transaction);
    executeLifecycleState(transaction);
    mPendingActions.clear();
    log("End resolving transaction");
}

15:executeCallbacks

final ClientTransactionItem item = callbacks.get(i);
log("Resolving callback: " + item);
final int postExecutionState = item.getPostExecutionState();
final int closestPreExecutionState = mHelper.getClosestPreExecutionState(r,
        item.getPostExecutionState());
if (closestPreExecutionState != UNDEFINED) {
    cycleToPath(r, closestPreExecutionState);
}
item.execute(mTransactionHandler, token, mPendingActions);

16:LauncheActivityItem

item为之前传入的LauncheActivityItem,查看LauncheActivityItem里面的execute函数

public void execute(ClientTransactionHandler client, IBinder token,
        PendingTransactionActions pendingActions) {
    Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityStart");
    ActivityClientRecord r = new ActivityClientRecord(token, mIntent, mIdent, mInfo,
            mOverrideConfig, mCompatInfo, mReferrer, mVoiceInteractor, mState, mPersistentState,
            mPendingResults, mPendingNewIntents, mIsForward,
            mProfilerInfo, client);
    client.handleLaunchActivity(r, pendingActions, null /* customIntent */);
    Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}

17:ActivityThread中的handleLaunchActivity

final Activity a = performLaunchActivity(r, customIntent);

18:​performLaunchActivity中创建Activity的核心代码

java.lang.ClassLoader cl = appContext.getClassLoader();
activity = mInstrumentation.newActivity(
        cl, component.getClassName(), r.intent);
StrictMode.incrementExpectedActivityCount(activity.getClass());
r.intent.setExtrasClassLoader(cl);
r.intent.prepareToEnterProcess();
if (r.state != null) {
    r.state.setClassLoader(cl);
}

19:创建activity之后,开始调用oncreate函数

int theme = r.activityInfo.getThemeResource();
if (theme != 0) {
    activity.setTheme(theme);
}
activity.mCalled = false;
if (r.isPersistable()) {
    mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
} else {
    mInstrumentation.callActivityOnCreate(activity, r.state);
}

20:Instrumentation,这里是真正调用onCreate函数的地方

执行活动{@link activity#onCreate}方法的调用。默认实现只是调用该方法。
prePerformCreate(activity);
activity.performCreate(icicle, persistentState);
postPerformCreate(activity);

21:14中的executeLifecycleState

// Execute the final transition with proper parameters.
lifecycleItem.execute(mTransactionHandler, token, mPendingActions);
lifecycleItem.postExecute(mTransactionHandler, token, mPendingActions);

22:执行ResumeActivityItem中的.execute函数

public void execute(ClientTransactionHandler client, IBinder token,
        PendingTransactionActions pendingActions) {
    Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityResume");
    client.handleResumeActivity(token, true /* finalStateRequest */, mIsForward,
            "RESUME_ACTIVITY");
    Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}

23:ActivityThread中的handleResumeActivity函数

// TODO Push resumeArgs into the activity for consideration
final ActivityClientRecord r = performResumeActivity(token, finalStateRequest, reason);
if (r == null) {
    // We didn't actually resume the activity, so skipping any follow-up actions.
    return;
}

24:performResumeActivity

try {
    r.activity.onStateNotSaved();
    r.activity.mFragments.noteStateNotSaved();
    checkAndBlockForNetworkAccess();
    if (r.pendingIntents != null) {
        deliverNewIntents(r, r.pendingIntents);
        r.pendingIntents = null;
    }
    if (r.pendingResults != null) {
        deliverResults(r, r.pendingResults, reason);
        r.pendingResults = null;
    }
    r.activity.performResume(r.startsNotResumed, reason);
    r.state = null;
    r.persistentState = null;
    r.setState(ON_RESUME);
}

25:Activity中的performResume,这里调用的是activity的onResume函数

mCalled = false;
// mResumed is set by the instrumentation
mInstrumentation.callActivityOnResume(this);
writeEventLog(LOG_AM_ON_RESUME_CALLED, reason);

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值