首页 > 其他分享 >Android系统启动流程、APP启动流程、activity启动流程

Android系统启动流程、APP启动流程、activity启动流程

时间:2023-09-08 16:22:40浏览次数:36  
标签:系统启动 启动 Launcher 流程 activity 进程 AMS

Android系统启动流程

打开电源时,先启动BootLoader → 使用BootLoader加载Linux内核 → 启动init进程 → 启动zygote进程 -(zygote调用system_server进程)→拉起packageManagerService和AMS(ActivityManagerService) → AMS启动Launcher应用。

 

APP启动流程

1,桌面程序点击app图标,会调用桌面程序的onClick方法,调用startActivity方法启动app
2. 启动新app,属于跨进程启动
3. 跨进程通信用到AMS(activity Manager Service),,ActivityManagerNative.getDefault返回ActivityManagerService的远程接口,即ActivityManagerProxy接口,
通过Binder驱动程序,ActivityManagerProxy与AMS服务通信,则实现了跨进程到System进程。AMS响应Launcher进程。在AMS的onTransact方法里面会获取到请求的Activity
4. 处理启动的activity的参数,判断是否需要新建task启动Activity
5. ApplicationThread对象的远程接口,通过调用这个远程接口的schedulePauseActivity,通知launcher进程进入Paused状态,
此时AMS对Launcher的请求已经响应,这时我们又通过Binder通信回调至Launcher进程。
Launcher进程挂起Launcher,再次通知AMS,此时AMS创建新的进程
6. 启动目标进程
创建新进程的时候,AMS会保存一个ProcessRecord信息,如果应用程序中的AndroidManifest.xml配置文件中,我们没有指定Application标签的process属性,系统就会默认使用package的名称。每一个应用程序都有自己的uid,因此,这里uid + process的组合就可以为每一个应用程序创建一个ProcessRecord。
新的进程会导入android.app.ActivityThread类,并且执行它的main函数
7. 绑定新进程
在AMS中注册应用进程,启动启动栈顶页面

此时在App进程,我们可以看到,经过一些列的调用链最终调用至MainActivity:onCreate函数,之后会调用至onResume,而后会通知AMS该MainActivity已经处于resume状态。至此,整个启动流程告一段落。

 

activity启动流程

一般分3个阶段,以activityA中启动activityB为例:

activityA请求Android system service(系统服务),具体指AMS(activity Manager Service)

                  

标签:系统启动,启动,Launcher,流程,activity,进程,AMS
From: https://www.cnblogs.com/Sharley/p/17687890.html

相关文章

  • 视频汇聚平台EsayNVR基于国网B接口的设备注册流程与鉴权技术分享
    国网B接口是用于国家电网视频监控系统内部的接入协议,主要用于视频监控系统与前端系统之间的交互。我们最近一直在研究该接口的接入开发,现在分享一些技术干货。1、接口描述①注册属于数据接口,采用SIP标准协议,URI中的用户名应为下级平台的地址编码。②注册过程需要进行鉴权,使......
  • Vue开发流程
    #Vue简介  Vue(发音为/vjuː/,类似 view)是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue都可以胜任。声明式渲染:Vue基于标准H......
  • 测试流程
    需求评审(需求是否合理、是否可测)测试计划(人、时间、业务点、资源)测试设计(测试用例)冒烟测试(准入测试,基本业务测试不通过直接打回)测试执行(环境、工具搭建、用例执行)bug提交新版本发布(bug有没有验证、新功能测试、回归测试)测试报告......
  • 【RabbitMQ】RabbitMQ 服务无法启动。系统出错。发生系统错误 1067。进程意外终止。
    问题描述RabbitMQ服务无法启动。rabbitmq-service.batstartRabbitMQ服务正在启动.RabbitMQ服务无法启动。系统出错。发生系统错误1067。进程意外终止。原因分析RabbitMQ和Erlang版本不匹配。解决方案查询并安装RabbitMQ版本对应Erlang版本https://www.rabbitmq.com......
  • 微服务启动失败,报错信息:java.lang.RuntimeException: dynamic-datasource Please chec
    【问题描述】Causedby:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'dataSource'definedinclasspathresource[com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.cl......
  • 启动nginx
    Docrootis:/usr/local/var/wwwThedefaultporthasbeensetin/usr/local/etc/nginx/nginx.confto8080sothatnginxcanrunwithoutsudo.nginxwillloadallfilesin/usr/local/etc/nginx/servers/.Tohavelaunchdstartnginxnowandrestartatlogin:b......
  • 详谈SpringBoot启动项目后执行自定义方法的方式
    在main启动函数中调用这个是在所有启动后执行,也是常用之一。@SpringBootApplicationpublicclassListenerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ListenerApplication.class,args);System.out.println("启动成......
  • mac mysql无法启动
    背景:在mac上装了mysql后无法启动,报错如下: 解决步骤:1.修改mysql配置文件,飘红的为修改部分(/usr/local/etc/my.cnf)#DefaultHomebrewMySQLserverconfig[mysqld]#Onlyallowconnectionsfromlocalhostbind-address=127.0.0.1#mysqlx-bind-address=127.0.0.1   #......
  • springboot - idea - active: @profileActive@ 有时候 不识别 @ 导致启动失败
    1.背景有时候正常,有时候不行,特别是maven执行了clean命令后 2.解决右键执行一下这个即可 ......
  • RTSP流媒体服务器EasyNVR视频平台以服务方式启动异常却无报错,该如何解决?
    EasyNVR是基于RTSP/Onvif协议的安防视频云服务平台,可实现设备接入、实时直播、录像、检索与回放、云存储、视频分发、级联等视频能力服务,可覆盖全终端平台(电脑、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧校园等场景中有大量落地应用。 有用户反馈,在项目现场启动Ea......