首页 > 其他分享 >Activity启动流程

Activity启动流程

时间:2024-09-15 10:24:14浏览次数:3  
标签:启动 流程 Activity ATMS activity startActivityForResult options

启动一个Activity,通常有两种情况:第一种是不同进程的的根activity,比如laucnher启动app;第二种是同进程内部启动activity。这两种情况的启动流程类似,大致分为以下三个步骤:

  1. 调用进程的activity收集好信息后,向system_server进程的ActivityTaskManagerSrvice服务发起请求。
  2. ATMS向PKMS寻找启动的activity的信息和进程信息,如果启动的activity没有被创建,则创建新进程,之后管理activity栈,并回调启动activity所在进程的ApplicationThread类。
  3. ApplicationThread通过调用ActivityThread来反射创建并启动Activity。

以下就逐一讲解这三大过程:

一、从startActivity到ATMS

无论是startActivity还是startActivityForResult最终都是调用startActivityForResult

public class Activity extends ContextThemeWrapper
        implements LayoutInflater.Factory2,
        Window.Callback, KeyEvent.Callback,
        OnCreateContextMenuListener, ComponentCallbacks2,
        Window.OnWindowDismissedCallback,
        AutofillManager.AutofillClient, ContentCaptureManager.ContentCaptureClient {

    @Override
    public void startActivity(Intent intent, @Nullable Bundle options) {
        ...
        
        if (options != null) {
            startActivityForResult(intent, -1, options);
        } else {
            // Note we want to go through this call for compatibility with
            // applications that may have overridden the method.
            startActivityForResult(intent, -1);
        }
    }

    public void startActivityForResult(@RequiresPermission Intent intent, int requestCode,
            @Nullable Bundle options) {
        // mParent 是Activity类型,是当前Activity的父类
        if (mParent == null) {
            options = transferSpringboardActivityOptions(options);
            // 调用Instrumentation.execStartActivity启动activity
            Instrumentation.ActivityResult ar =
                mInstrumentation.execStartActivity(
                    this, mMainThread.getApplicationThread(), mToken, this,
                    intent, requestCode, options);
            ...
            
        } else {
            ...

        }
    }
}

startActivityForResult中继续调用Instrumentation.execStartActivity方法。Activity中的mInstrumentation是在attach()方法中初始化,由ActivityThread传入,其作用一是通过远程服务调用启动activity;二是连接ActivityThread与activity,处理activity生命周期回调。

  • ActivityTaskManager.getService()获取ATMS的代理类,通过Binder跨进程通信,向ATMS发起startActivity请求。
  • 向ATMS发起启动activity请求,获得启动结果result,根据result判断能否启动activity,不能则抛出异常,比如activity未在manifest中声明。


标签:启动,流程,Activity,ATMS,activity,startActivityForResult,options
From: https://blog.51cto.com/u_13529088/12023525

相关文章

  • 优化批处理流程:自定义BatchProcessorUtils的设计与应用
    优化批处理流程:自定义BatchProcessorUtils的设计与应用| 原创作者/编辑:凯哥Java                    | 分类:个人小工具类在我们开发过程中,处理大量的数据集是一项常见的任务。特别是在数据库操作、文件处理或者任何需要对大量数据进行分......
  • HTTPS的加密流程:保护你的数据传输
    目录1.什么是HTTPS?2.HTTPS的加密流程2.1 客户端发起HTTPS请求2.2 服务器响应并发送证书2.3 客户端验证证书2.4 客户端生成加密密钥2.5 客户端使用服务器的公钥加密密钥2.6 服务器解密密钥2.7 建立加密通道2.8 数据传输2.9 会话结束3.总结在当今这个......
  • 04. 流程控制
    一、流程控制  流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为:顺序结构,分支结构(或称选择结构),循环结构。顺序结构:程序自上到下执行,中间没有任何判断和跳转;分支结构:根据条件,选择性的执行某段代码,有if……else和switch……case两种分支语句;循环结......
  • WordPress加载流程的解读分析
    index.php```php<?php/**这个文件只用来加载'/wp-blog-header.php'**@packageWordPress//**声明一个全局变量,用来判断是否加载主题**@varbool/define('WP_USE_THEMES',true);/*加载WordPress环境和模板/requireDIR.'/wp-blog-header.php';```wp......
  • 数据资产入表全流程解析,助力企业数据要素价值释放
    数据资产入表即数据资产会计核算,指的是把有价值的数据编制进资产负债表,作为企业沉淀的无形资产,让数据要素的交易流通变得合规,数据价值可计算。2023年8月21日,财政部发布《企业数据资源相关会计处理暂行规定》,并于2024年1月1日开始实施,首次将数据资源纳入企业会计核算体系,明确了数据......
  • WordPress加载流程的解读分析
    index.php```php<?php/**这个文件只用来加载'/wp-blog-header.php'**@packageWordPress//**声明一个全局变量,用来判断是否加载主题**@varbool/define('WP_USE_THEMES',true);/*加载WordPress环境和模板/requireDIR.'/wp-blog-header.php';```wp......
  • 谷歌个人开发者账号申请流程
    需支付25美金用于创建Google开发者账号的,Google账号只能使用Visa、Master、JCB、运通卡或Discover(国内用户建议使用招商的信用卡,其他行的支付有时会不成功),只需支付一次,即可永久使用创建Play管理中心开发者账号所需的必要信息https://support.google.com/googleplay/android-devel......
  • 基于java基于BS结构下的OA流程可视化的研究与实现的计算机毕设源码+论文
    B/S结构下的OA流程可视化的研究与实现摘  要工作流是指整个或部分业务流程在计算机支持下的全自动或半自动化。在计算机网络环境下,工作任务在多个人或单位之间的流转实际上将表现为信息或数据在多个人之间的传送。使用可视化的OA工作流设计工具,用户不需要编程就可以定义设计出满......
  • 工业智能网关如何助力企业实现生产流程优化-天拓四方
    在数字化转型的浪潮中,工业智能网关作为连接物理世界与数字世界的桥梁,正逐步成为智能制造领域的核心组件。本文将通过一个实际使用案例,深入剖析工业智能网关如何助力企业实现生产流程的优化、数据的高效采集与分析,以及智能化决策的落地,展现其在智能制造中的独特价值。一、案例背景 ......
  • WordPress加载流程的解读分析
    index.php```php<?php/**这个文件只用来加载'/wp-blog-header.php'**@packageWordPress//**声明一个全局变量,用来判断是否加载主题**@varbool/define('WP_USE_THEMES',true);/*加载WordPress环境和模板/requireDIR.'/wp-blog-header.php';```wp......