android启动过程android应用启动流程|activity启动流程(代码片段)

韩曙亮 韩曙亮     2023-01-02     465

关键词:





一、Android 系统启动流程



打开 Android 手机电源键后 , 先运行 BootLoader , 然后使用 BootLoader 加载 Linux Kernel ,

之后会启动 init 进程 , init 进程会启动 Zygote ( 受精卵 ) 进程 ,

Zygote 进程会调用 system_server 进程 , system_server 进程 会拉起 PackageManagerService 进程ActivityManagerService 进程 ,

ActivityManagerService 进程 会启动 Launcher 应用 ; Launcher 应用就是界面中显示各个应用图标的应用 , 就是 Android 的桌面应用 ;


Framework 层有 2 2 2 个最重要的进程 , Zygote 进程 和 SystemServer 进程 ;


Zygote 进程通过 fork() 创建应用进程 ;


整理成如下框图 :





二、Activity 启动流程



Android 应用启动方式有 2 2 2 种 , 分为冷启动和热启动 ;

  • 冷启动 : 后台没有应用进程 , 需要先创建进程 , 然后启动 Activity ;
  • 热启动 : 后台有应用进程 , 不创建进程 , 直接启动 Activity ;

Activity 启动一般分为 3 3 3 个阶段 , 以 Activity A 中启动 Activity B 为例 :

阶段 1 1 1 : Activity A 请求 Android System Service ( 系统服务 ) , 具体指的是 ActivityManagerService ( AMS ) ;

阶段 2 2 2 : 系统服务收到 Activity 启动消息 , 调用 ActivityThread 中的相关代码创建 Activity B ;

阶段 3 3 3 : 在应用 ActivityThread 主线程中 , 启动 Activity B 页面 ;

简要流程 : Activity A -> ActivityManagerService -> ActivityThread -> Activity B ;


在 Launcher 应用中启动 Activity 示例 : 在 Launcher 应用中 , 调用 startActivity() 方法启动 Activity , 首先获取 system_server 进程中的 ActivityManagerService ( AMS ) ,

  • 如果是冷启动 , 执行路线如下 : Launcher -> AMS -> Zygote -> ActivityThread ; 如果没有进程 , 首先要调用 Zygote 进程 , fork 一个新的进程 , 然后调用该进程对应的 ActivityThread 创建并跳转到指定 Activity 页面中 ;

  • 如果是热启动 , 执行路线如下 : Launcher -> AMS-> ActivityThread ; 如果有该应用进程 , 直接调用该进程对应的 ActivityThread 创建并跳转到指定 Activity 页面中 ;

android应用启动流程分析(代码片段)

1前言网上看过很多Activity启动过程的源码解析,很多文章会贴上一大段代码,然后从startActivity()函数开始深究整个源码的调用栈。个人感觉这类文章代码细节太多,反而容易迷失在源码调用之中,从而忽略了Activit... 查看详情

android系统启动流程分析(代码片段)

一、启动初探在android手机上,当我们点击桌面上的按钮启动一个应用,就能打开应用的界面。这里我们所说的桌面其实就是android系统启动后的就已经帮我们运行的第一个程序,launcher程序。launcher程序可以理解为作为... 查看详情

android—launcher启动流程

Launcher应用程序在启动过程中会通过PackageManagerService服务请求查询系统所有的已安装应用的包名,图标和应用名称等信息,然后填充到Launcher中的Adapter中,这样点击某一项应用图标的时候就可以根据该图标的包名和启... 查看详情

android7.0应用冷启动流程分析(代码片段)

最近在为自己MotoG定制Rom,顺便重新读了一遍Android7.0的相关源码,特此记录当做笔记.在开始正文之前,首先要明白冷启动和热启动.所谓冷启动就是启动该应用时,后台没有该应用的进程,此时系统会创建一个进程分配给它(AMS通过Socket... 查看详情

android启动过程activity启动源码分析(activitythread流程分析二)(代码片段)

文章目录前言一、ActivityManagerService.attachApplicationLocked二、ActivityStackSupervisor.attachApplicationLocked三、ActivityStackSupervisor.realStartActivityLocked前言在上一篇博客【Android启动过程】Activity启动源码分析(ActivityThre 查看详情

android—launcher启动流程

...0c;然后调用startActivity(Intent)启动相关的应用程序了。其实android中应用进程可以通过许多方式启动,比如启动一个Activity,启动一个Service,启动一个ContentProvider或者是一个BroadcastReceiver,也就是说我们可以通过启动... 查看详情

android启动过程activity启动源码分析(activitythread流程分析一)(代码片段)

文章目录一、ActivityThread主函数启动二、ActivityThread绑定ApplicationThread三、AMSattachApplication->attachApplicationLocked绑定ApplicationThread四、ApplicationThread.bindApplication绑定ApplicationThread五、ActivityThread. 查看详情

android应用程序启动过程源代码分析(代码片段)

     前文简要介绍了Android应用程序的Activity的启动过程。在Android系统中,应用程序是由Activity组成的,因此,应用程序的启动过程实际上就是应用程序中的默认Activity的启动过程,本文将详细分析应用程序框架... 查看详情

android系统启动流程

Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段;从开机到启动HomeLauncher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初... 查看详情

android逆向android进程简介(android应用启动流程)(代码片段)

文章目录前言一、Android进程二、Android应用启动流程前言参考【Android逆向】Android系统文件分析(/proc/pid进程号对应进程目录|oom_adj|maps|smaps|mem|task|environ)博客,/proc/目录中存放的是所有进程相关信息;一、Android进程Android操作系统中... 查看详情

android逆向android进程简介(android应用启动流程)(代码片段)

文章目录前言一、Android进程二、Android应用启动流程前言参考【Android逆向】Android系统文件分析(/proc/pid进程号对应进程目录|oom_adj|maps|smaps|mem|task|environ)博客,/proc/目录中存放的是所有进程相关信息;一、Android进程Android操作系统中... 查看详情

从launcher程序启动app流程分析(代码片段)

一、启动初探”在android手机上,当我们点击桌面上的按钮启动一个应用,就能打开应用的界面。这里我们所说的桌面其实就是android系统启动后的就已经帮我们运行的第一个程序,launcher程序。launcher程序可以理解为作... 查看详情

android从程序启动startactivity到生命周期变化的过程

在上篇文章中,我们了解了Android应用程序是如何启动的,也介绍了具体的流程调用。知道了整个APP的启动过程都是由ActivityThread类中执行的,而且启动中的生命周期的变化都是通过Handler消息机制来完成的。那么这篇... 查看详情

android7.0应用冷启动流程分析(代码片段)

最近在为自己MotoG定制Rom,顺便重新读了一遍Android7.0的相关源码,特此记录当做笔记.在开始正文之前,首先要明白冷启动和热启动.所谓冷启动就是启动该应用时,后台没有该应用的进程,此时系统会创建一个进程分配给它(AMS通过Socket... 查看详情

android逆向加壳的android应用启动流程|使用反射替换loadedapk中的类加载器流程(代码片段)

文章目录一、加壳的Android应用启动流程二、使用反射替换LoadedApk中的类加载器流程一、加壳的Android应用启动流程加壳的Android应用启动流程:加壳的Android应用执行时,壳代码获取应用的执行权限,然后将加壳的应用修正后,获得真正... 查看详情

android逆向加壳的android应用启动流程|使用反射替换loadedapk中的类加载器流程(代码片段)

文章目录一、加壳的Android应用启动流程二、使用反射替换LoadedApk中的类加载器流程一、加壳的Android应用启动流程加壳的Android应用启动流程:加壳的Android应用执行时,壳代码获取应用的执行权限,然后将加壳的应用修正后,获得真正... 查看详情

android系统启动流程

...2.Zygote启动流程3.SystemServer启动流程1. Init进程启动流程 Android启动流程 init进程–> Zygote进程–> SystemServer进程–>各种应用进程 Init进程init是第一个进程,我们可以说它是root进程或者说有进程的父进程。init进程有两... 查看详情

android系统启动流程分析(代码片段)

一、启动初探在android手机上,当我们点击桌面上的按钮启动一个应用,就能打开应用的界面。这里我们所说的桌面其实就是android系统启动后的就已经帮我们运行的第一个程序,launcher程序。launcher程序可以理解为作为... 查看详情