Activity启动流程分析

这篇具有很好参考价值的文章主要介绍了Activity启动流程分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、activity跨进程启动

Activity启动流程分析

  • 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求
  • system_server进程接收到请求后,向zygote进程发送创建进程的请求;
    Zygote进程fork出新的子进程,即App进程
  • App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
  • system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进 程发送scheduleLaunchActivity请求
  • App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息
  • 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法

二、activity进程内启动

1.相关类

  • ActivityThread:main()函数,相当于一个Handler,主线程,UI线程
  • ApplicationThread:与AMS沟通桥梁
  • mInstrumentation:通过这个api启动app,用来跟踪Activity和Application生命周期的类
  • AMS:数据管理者

2.启动流程

请求进程A:startActivity—(hook插入点1) (AMP,ActivityManager代理对象)——> system_server进程:AMS(ActivityManagerService)解析Activity信息、处理启动参数、scheduleLaunchActivity/mH中EXECUTE_TRANSACTION消息处理(Android P)–>回到请求进程A:ApplicationThread --> ActivityThread -(hook插入点2)-> Activity生命周期

简单点来说就是通过AMS代理类,封装创建Activity的信息,然后回调给ActivityThread,通过mInstrumentation创建Activity,调用onCreate方法启动Activity


三、显式启动和隐式启动

1.显式启动

1、构造方法传入Component,最常用的方式
2、setComponent(componentName)方法
3、setClass/setClassName方法

2.隐式启动

隐式Intent是通过在AndroidManifest文件中设置action、data、category,让系统来筛选出合适的Activity文章来源地址https://www.toymoban.com/news/detail-493958.html

		<activity
            android:name="com.juexiao.fakao.ui.activity.WelcomeActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
            <intent-filter>
        		<action android:name="com.jrmf360.action.ENTER"/>
        		<category android:name="android.intent.category.DEFAULT"/>
        		<data
            		android:host="jrmf360.com"
            		android:port="8888"
            		android:scheme="jrmf"/>
    		</intent-filter>
        </activity>

action匹配规则

  • Intent-filter action可以设置多条
  • intent中的action只要与intent-filter其中的一条匹配成功即可,且intent中action最多只有一条
  • Intent-filter内必须至少包含一个action

category匹配规则

  • Intent-filter内必须至少包含一个category,android:name为android.intent.category.DEFAULT
  • intent-filter中,category可以有多条
  • intent中,category也可以有多条
  • intent中所有的category都可以在intent-filter中找到一样的(包括大小写)才算匹配成功

data匹配规则

  • intent-filter中可以设置多个data
  • intent中只能设置一个data
  • intent-filter中指定了data,intent中就要指定其中的一个data

到了这里,关于Activity启动流程分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Activity 的启动流程(Android 13)

    Activity 的启动过程分为两种:一种是普通 Activity 的启动过程,另一种是根 Activity 的启动过程。普通 Activity 指的是除应用程序启动的第一个 Activity 之外的其他 Activity。 根 Activity 指的是应用程序启动的第一个 Activity,因此,根 Activity 的启动过程一般情况下也可以理解为应用程

    2024年02月11日
    浏览(46)
  • Android Activity 启动流程 二:setContentView

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 接 - 上 篇,Activity创建后,还只是调用了onCreate方法,页面并没有展示出来,还需要调用setContentVie

    2024年02月10日
    浏览(46)
  • adnroid 11. 0 Activity启动流程图解

    从Launcher到ActivityTaskManager 从ActivityTaskManagerService 到 ApplicationThread 从ApplicationThread到onCreate

    2024年02月15日
    浏览(44)
  • Android Activity的启动流程(Android-10)

    在Android开发中,我们经常会用到startActivity(Intent)方法,但是你知道startActivity(Intent)后Activity的启动流程吗?今天就专门讲一下最基础的startActivity(Intent)看一下Activity的启动流程,同时由于Launcher的启动后续和这里基本类似,就记录在一起。注意本章都是基于Android-10来讲解的。

    2024年01月17日
    浏览(45)
  • Activity启动过程详解(Android 12源码分析)

    启动一个Activity,通常有两种情况,一种是在应用内部启动Activity,另一种是Launcher启动 1、应用内启动 通过startActivity来启动Activity 启动流程: 一、Activity启动的发起 二、Activity的管理——ATMS 三、线程切换即消息处理——mH 四、Activity启动核心实现——初始化及生命周期 2、

    2024年02月13日
    浏览(45)
  • android_adb pm和adb am@启动Activity@杀死app进程@冻结或卸载系统更新和应用商店

    Android 调试桥 (adb) | Android 开发者 | Android Developers (google.cn) 这部分文档并不包含所有的指令功能的介绍 可以和命令行的 --help 选项的本地文档一同查阅 运行方式有两种 不进入shell直接运行 每次执行命令(issue command)需要带上adb shell开头的前缀 例如: adb shell pm list packages -s -d|nl

    2024年02月03日
    浏览(56)
  • adb 命令获取当前页面的Activity,启动某个Activity

    每次找来找去太麻烦,再次记录一下

    2024年01月18日
    浏览(49)
  • Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)

    简单的说:Activity或者悬浮于其它窗体上的交互界面。 在一个应用程序中通常由多个Activity构成。都会在Manifest.xml中指定一个主的Activity,例如以下设置 actionandroid:name=”android.intent.action.MAIN” / 当程序第一次执行时用户就会看这个Activity,这个Activity能够通过启动其它的Activi

    2024年02月04日
    浏览(45)
  • Android Activity启动过程详解

    1,《android系统启动流程简介》 2,《android init进程启动流程》 3,《android zygote进程启动流程》 4,《Android SystemServer进程启动流程》 5,《android launcher启动流程》 6,《Android Activity启动过程详解》 1,《Android 源码下载和编译》 2,《android 11源码编译和pixel3 刷机》 3,《Andro

    2024年02月09日
    浏览(48)
  • Android 后台启动Activity适配

    在Android 9及以下版本,后台启动Activity相对自由,但是如果在Activity上下文之外启动Activity会有限制。 所以此时需要给intent添加flag:FLAG_ACTIVITY_NEW_TASK。 在Android版本10及以后版本, 引入了后台执行限制,限制了应用在后台执行操作的能力。非核心任务的后台启动 Activity 可能会

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包