Activity启动流程概述

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

总结:

Activity的启动过程,我们可以从ContextstartActivity说起,其实现是ContextImplstartActivity(内部调用startActivityForResult),然后内部会通过Instrumentation来尝试启动Activity,这是一个跨进程过程,它会调用ams的startActivity方法,当ams校验完activity的合法性后,会通过ApplicationThread回调到我们的进程,这也是一次跨进程过程,而applicationThread就是一个binder,回调逻辑是在binder线程池中完成的,所以需要通过Handler H将其切换到ui线程,第一个消息是LAUNCH_ACTIVITY,它对应handleLaunchActivity,在这个方法里完成了Activity的创建和启动,接着,在activity的onResume中,activity的内容将开始渲染到window上,然后开始绘制直到我们看见

流程

  1. Launcher进程请求AMS
  2. AMS发送创建应用进程请求
  3. Zygote进程接受请求并孵化应用进程
  4. 应用进程启动ActivityThread
  5. 应用进程绑定到AMS
  6. AMS发送启动Activity的请求
  7. ActivityThreadHandler处理启动Activity的请求

Q&A

Instrumentation是在任何应用程序运行前进行初始化的,可以用它来检测系统和应用程序间的交互。每一个activity都会持有instrumentation的引用,但是整个进程只有一个instrumentation实例,instrumentation相当于一个大管家,管理着activity和application的生命周期,包括activity的创建。

  1. 无论是通过Launcher启动,还是通过activity 内部来调用startActivity接口 来启动新的activity,都是通过Binder进程间通信进入到AMS进程中,并且调用AMS.startActivity 接口

  2. AMS调用 ActivityStack.startActivityMayWait来做准备要启动的activity的相关信息

  3. ActivityStack通知 ApplicationThread 要进行Activity 启动调度了,这里的ApplicationThread代表要调用 AMS.startActivity接口的进程,对于通过点击应用图标来说的情景来说,这个进程就是launcher了,而对于通过内部调用activity来说,这个进程就是activity 所在的进程

  4. ApplicationThread 不执行真正的启动操作,他通过调用AMS.activityPaused接口进入到AMS进程中,看看是否需要创建新的进程来启动activity

  5. 对于通过点击应用图标启动activity的场景说,AMS在这一步中没回调用startProcessLocked来创建一个新的进程,而对于通过在内部启动新的activity来说,这一步不需要执行,因为新的activity就在原来的activity所在的进程中启动

  6. AMS调用 ApplicationThread.scheduleLaunchActivity接口,通知相应的进程执行启动activity的操作

  7. ApplicationThread把这个启动activity的操作转发给ActivityThread,activityThread通过classLoader导入相应的activity类,然后把它启动起来

  8. ActivityThread:主线程、UI线程,程序的入口(main函数),不是线程是运行在主线程中的一个对象。

  9. ApplicationThread是ActivityThread和AMS交互的中间桥梁。

  10. ApplicationThread 和ActivityThread之间的联系是通过Handler,ActivityThread的变量final H mH = new H(); 私有内部类H继承自Handler,是主线程的handler,处理一些消息事务。

  11. 关于ApplicationThread: 是ActivityThread的私有变量,也是一个Binder对象,ApplicationThread是Client端的Binder,里面有操作scheduleXX方法处理四大组件的生命周期方法,所以AMS(AMS是Android系统最为核心的服务之一,其职责包括四大核心组件与进程的管理)服务想要调用启动组件,那就必须持有ApplicationThread的实例,如调用ApplicationThread的scheduleLaunchActivity方法,最后在scheduleLaunchActivity方法中sendMessage方法发送消息,ActivityThread中处理消息。

从Launcher启动activity

首先Launcher进程向AMS请求创建根Activity,AMS会判断根Activity所需的应用程序进程是否存在并启动,如果不存在就会请求Zygote进程创建应用程序进程。应用程序进程启动后,AMS会请求应用程序进程创建并启动根Activity。

Activity启动流程概述

app内的Activity启动:

Activity启动流程概述文章来源地址https://www.toymoban.com/news/detail-512459.html

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

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

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

相关文章

  • Activity启动过程详解(Android 12源码分析)

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

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

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

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

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

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

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

    2024年01月17日
    浏览(47)
  • UI绘制流程分析(前篇)--App与Activity的启动

    彻底搞懂UI绘制流程,看该系列就够了 作为安卓开发最重要的知识点之一,UI绘制无疑是必须掌握的,要想搞懂它的测量、布局和绘制,得先理解它的整个流程,但现在让我们把时间再往前拨一下,先要从App启动流程以及Activity启动流程讲起。 提示:以下是本篇文章正文内容

    2024年02月16日
    浏览(51)
  • FrameWork的概述与启动过程

    Framework定义了客户端组件和服务端组件功能及接口。以下阐述中,“应用程序”一般是指“.apk”程序。 框架中包含三个主要部分,分别为服务端、客户端和Linux驱动。 服务端主要包含两个重要类,分别是WindowManagerService(WmS)和ActivityManagerService (AmS)。 WmS的作用是为所有的应

    2024年02月10日
    浏览(46)
  • 6、LINUX 系统启动过程概述

    Linux系统启动过程可以分为以下几个阶段: BIOS/UEFI:计算机开机时,首先会执行基本输入输出系统(BIOS)或统一可扩展固件接口(UEFI)。这个过程中,BIOS/UEFI会自检硬件设备并初始化它们,然后查找并加载引导设备(如硬盘或光盘)中的引导扇区。 引导管理器(Boot Manager)

    2024年02月14日
    浏览(36)
  • Android应用启动流程:从启动到可交互的过程解析

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 我们继续总结学习 Android 基础知识 ,温故知新。 还是在多年前做系统应用开发的时候,通过编译源码学习了一

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

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

    2024年01月18日
    浏览(51)
  • Android进阶 四大组件的工作过程(一):Activity的工作过程

    本系列文章主要是来介绍Android中四大组件的工作过程的,参照书籍为Android进阶解密,主要还是会涉及到源码的阅读。关于源码,大家可以到Android Code Search上查看,网址放在这里了:Android Code Search。除此之外,最好还需要掌握一些Android系统启动过程的知识: Android系统的启动

    2024年02月09日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包