Android Application启动流程

  转载:http://www.51testing.com/html/34/n-3725434.html  
?      先对整体有了一个基本的认识之后,再去看细节

  谈到Android Application的启动流程,很多文章都是各种源码类和方法的一堆调用关系,这样的文章就算看一百遍,也只是云里雾里。源码得看,但是最好不要一下子深陷到源码的细节之中,不可自拔。这里站在前人的基础之上做一个总结。

  在说应用的启动流程之前,得先了解一下Android系统的启动流程,因为Application的启动是离不开系统的处理的。

  Android系统的启动流程

  1.BootLoader启动内核和init进程;

  2.init进程分裂出过个守护进程,如Android Debug Damon,USB Damon,这些守护进程会处理一些与硬件相关的接口;

  3.init进程启动一个Zygote进程

  Zygote进程初始化了第一个VM,并预加载了Framework和一些通用资源。

  zygote进程会开启一个Socket接口,用来监听请求。一旦收到请求,Zygote会基于自身预先加载的VM来孵化一个新的VM,并创建一个新的进程。

  4.启动Zygote之后,init进程会启动Runtime进程。Zygote会孵化出一个超级管理进程-System Server。System Server 会启动所有系统核心的服务,如Activity Manager Service以及硬件相关的Service。

  5.这个时候就开始准备启动它的第一个App进程-Home进程了。

  Android系统已经启动完毕,一些核心的服务也已经启动完毕,然后启动Launcher应用,那么什么时候启动应用的进程呢?

  App进程什么时候被创建?

  答案是被需要的时候才创建。

  如果当一个应用(多是Launcher)调用App中的页面之时,如果目标进程不存在,则会创建一个新的进程并启动。

  Application启动流程

  在说Application启动流程之前,先看一张前人的流程图:

  App启动流程

  分析流程的时候,可以同时看一下上面的流程图。

  点击桌面Icon

  然后调用StartActivity(Intent intent)方法;

  这个方法最终会通过Binder IPC的方式调用ActivityManagerService,这里简称AMS。

  AMS会执行以下操作:

  最终会通过PackageManager的resolveIntent()方法收集这个Intent对象的指向信息(中间会经历很多类,方法的调用)。

  通过grantUriPermissionLocked()方法验证用户是否具有足够的权限去调用目标Activity;

  查询ProcessRecord是否存在

  如果不存在,AMS会创建新的进程来实例化目标Activity。

  接下来就说App进程的创建过程了。

  App进程的创建

  调用startProcessLocked()方法创建新的进程

  通过上面所说的Socket通道传递参数给Zygote进程,Zygote进程孵化自身,并调用ZygoteInit.main()方法来实例化ActivityThread对象,并最终返回新进程的pid。

  ActivityThread依次调用Looper.prepare()和Looper.loop()方法来开启消息循环。

  这个时候进程已经创建完毕,但是如何与应用自身的Application联系起来呢?

  Application的绑定

  调用ActivityThread中的bindApplication()方法发送一个BIND_APPLICATION的消息到消息队列中.

  通过handleApplication()方法处理之前的绑定消息;

  调用makeApplication()方法来加载Application的class 到内存中。

  大概的流程如下,如果需要做一些特殊的处理,还是需要自己深入到源码中,找到自己可以处理的点,进行一些定制化处理。

原文地址:https://www.cnblogs.com/testor/p/8662799.html

时间: 2024-10-14 12:53:36

Android Application启动流程的相关文章

Android手机启动流程探究

按下手机电源键后,手机会依次经历:点亮屏幕->开机动画->进入Launcher几个阶段.而Android系统具体是如何启动起来的呢?作为技术人员,我很直接地就会想到以下疑惑的问题: 启动逻辑如何? 在机器中,启动的时候调用的文件流程步骤如何? 对应在源码中的代码如何? 对应编译生成的img文件,功能分类如何? 为了回答以上问题,依次研究之. 1.启动逻辑 1.1手机开机基本流程 按下电源键后手机到底做了些什么?我们首先解答这个问题. 大致流程图如下(MTK平台手机为例,其他平台大同小异): 图

Android WIFI 启动流程(TIP^^)

前几天因为解决一堆Bug,没时间写.我不会每天都写,就是为了存档一些资料. 内容来源:工作中接触到的+高手博客+文档(Books)=自己理解 仅限参考^^ 此博客是上一个<<Android WIFI 启动流程>>的附加项. 参考博客:http://blog.csdn.net/eoeandroida/article/details/40583353 配置AP: 当用户在WifiSettings界面上选择了一个AP后,会显示配置AP参数的一个对话框. showAccessPointDi

【转】Android kernel启动流程

;font-family:Arial, Console, Verdana, 'Courier New';line-height:normal;white-space:normal;background-color:#FFFFFF;"> linuxandroidmakefileimagecachealignment 虽然这里的Arm Linux kernel前面加上了Android,但实际上还是和普遍Arm linux kernel启动的过程一样的,这里只是结合一下Android的Makef

android L 启动流程

android启动流程文章已经概述了android的启动流程,而andoird 5.0的流程其实也差不多,少数不同而已. 如下图: 整个启动流程与之前的一样,唯一不同的是android L支持64位的app,所以又起一个Zygote64来专门负责64位APK的孵化. 而且创建Zygote进程脚本在init.zygoteXX.rc里. 如下: system/core/rootdir/init.zygote64_32.rc system/core/rootdir/init.zygote64.rc s

Android 框架启动流程

As we all know,Android手机系统本质上是一个基于Linux的应用程序,它以Linux系统为内核.因此系统的启动过程包括Linux内核启动和Android框架启动两个阶段. Linux内核启动 1.装载引导程序bootloader Linux内核启动时首先装载执行bootloader引导程序,装载完成后进入内核程序. 2.加载Linux内核 Linux内核加载主要包括初始化kernel核心(内存初始化,打开中断,初始化进程表等).初始化驱动.启动内核后台(daemons)线程.

Android WIFI 启动流程

参考:http://blog.chinaunix.net/uid-26215986-id-3260413.html 一. WIFI 工作步骤 1. Wifi模块初始化 2. Wifi启动 3. 查找热点(AP) 4. 配置AP 5. 配置AP参数 6. Wifi连接 7. IP地址配置 二. WIFI 核心模块 1. WifiService 由SystemServer启动的ConnecttivityService创建, 负责启动关闭wpa_supplicant, WifiMonitor线程, 把

android代码启动流程2

上回 说到,开始调用 ZygoteInit  main 函数,main 函数: registerZygoteServer:注册一个 zygote server socket,所有来自客户端的连接都通过 socket 方式连接: preload:预加载系统的类库和资源,这样其他程序启动将不再加载系统资源,只需加载自己程序的资源,这样就达到系统资源在程序之间共享: startSystemServer: private static boolean startSystemServer() throws

Android启动流程分析(一)

############################################# 本文为极度寒冰原创,转载请注明出处 ############################################# Android的启动流程绝大部分人都知道,但是大多数人都是这样描述的: Android启动,首先是启动Bootloader,然后挂载kernel,挂载完kernel之后,会启动android的init进程,init进程会去孵化Zygote,Zygote是android的重要支柱之

Android白话启动篇(Android booting process)

今天我们将深入Android的启动流程,从用户按下开机键到Android界面的过程.在谷歌上搜索"Android boot process"会得到很多很好英文文章,讲解Android启动这一过程,每个人讲述的角度不一样,通过阅读,对于Android的理解将会更加深刻.下面是链接,打不开的请翻墙!谢谢! https://www.google.com.hk/search?q=The+Android+Booting+process&oq=The+Android+Booting+pro