您的位置:首页 > 移动开发 > Android开发

Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程

2015-08-22 20:42 701 查看
1、儿子Activity在启动过程中的流程组件

在Android Activity启动过程/article/2587654.html一文中,我们已经具体分析了Activity的启动过程,对于子Activity组件在进程内的启动过程。我们仅仅分析它们之间的不同。

主要是2处。1是不须要创建新的任务栈。2是不须要创建新进程和子线程。表如今上一篇文章的总图中。就是没有第4步。并且第5步指向的Laucher子线程。

第1点,体如今例如以下代码上:

~/Android/frameworks/base/services/java/com/android/server/am

----ActivityStack.java

public class ActivityStack {

......

final int startActivityUncheckedLocked(ActivityRecord r,
ActivityRecord sourceRecord, Uri[] grantedUriPermissions,
int grantedMode, boolean onlyIfNeeded, boolean doResume) {
final Intent intent = r.intent;
final int callingUid = r.launchedFromUid;

int launchFlags = intent.getFlags();

......

if (sourceRecord == null) {
......
} else if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
......
} else if (r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE
......
}

if (r.resultTo != null && (launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
......
}

boolean addingToTask = false;
........

boolean newTask = false;

// Should this be considered a new task?

if (r.resultTo == null && !addingToTask
&& (launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
......

} else if (sourceRecord != null) {
......
// An existing activity is starting this new activity, so we want
// to keep the new one in the same task as the one that is starting
// it.
r.task = sourceRecord.task;
......

} else {
......
}

......

startActivityLocked(r, newTask, doResume);
return START_SUCCESS;
}

......

}


第2点,体如今例如以下代码上,此时已经有了子Activity进程和它的子线程了。

private final void startSpecificActivityLocked(ActivityRecord r,
boolean andResume, boolean checkConfig) {
// Is this activity's application already running?
ProcessRecord app = mService.getProcessRecordLocked(r.processName,
r.info.applicationInfo.uid);

.....

if (app != null && app.thread != null) {
try {
realStartActivityLocked(r, app, andResume, checkConfig);
return;
} catch (RemoteException e) {
.....
}

.....
}

......
}


2、子Activity组件在新进程中的启动过程

和Android Activity组件的启动过程/article/2587654.html一文中,主要有一个差别。不须要创建新的任务栈。代码如上面所看到的。还须要创建新进程和子线程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: