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);