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


    1、儿子Activity在启动过程中的流程组件

           在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文中,我们已经具体分析了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组件的启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文中,主要有一个差别。不须要创建新的任务栈。代码如上面所看到的。还须要创建新进程和子线程。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    guid与Base64编码互相转换
    xml序列化与反序列化工具
    Win10 15063 开始运行不保存历史记录原因和解决方法
    win10 localhost 解析为 ipv6地址 ::1 的解决办法
    在VisualStudio中应该使用什么字体
    S7-200系列PLC与WINCC以太网通信CP243i的实例
    超棒的 15 款 Bootstrap UI 编辑器
    NuGet学习笔记(转)
    SQLServer公历转农历函数(1900年-2049年)
    WPF 的datagrid 列名中没有显示下划线是怎么回事?
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4751012.html
Copyright © 2020-2023  润新知