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
第2点,体如今例如以下代码上,此时已经有了子Activity进程和它的子线程了。
2、子Activity组件在新进程中的启动过程
和Android Activity组件的启动过程/article/2587654.html一文中,主要有一个差别。不须要创建新的任务栈。代码如上面所看到的。还须要创建新进程和子线程。
在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一文中,主要有一个差别。不须要创建新的任务栈。代码如上面所看到的。还须要创建新进程和子线程。
相关文章推荐
- 解决Android SDK Manager下载速度慢的方法
- Android-基本控件(五大布局 Layout)
- [Android随笔]内存泄漏以及内存溢出
- Android-基本控件(CheckBox,RadioGroup,RadioButton)
- Android-基本控件(AutoCompleteTextView,MultiAutoCompleteTextView,ToggleButton)
- c的rand()函数,相同的种子,windows和android下产生的随机数列不一样
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
- Android,iOS,浏览器打开手机QQ与指定用户聊天界面
- Android异步任务之AsyncTask
- [置顶] android studio 安装出现两个图标
- 解析Android的 消息传递机制Handler
- android 电容屏(四):驱动调试之驱动程序分析篇 -- FocalTech
- android 电容屏(三):驱动调试之驱动程序分析篇
- Android:ViewPager04
- android 电容屏(二):驱动调试之基本概念篇
- android-反编译后重新打包apk文件
- android 电容屏(一)
- 深入理解Android卷III 第8章 深入理解Android壁纸 (节选)
- 深入理解Android卷III 第6章 深入理解控件系统 (节选)
- Android src和background的区别