性能优化(一)APP 启动优化之启动流程

链接:https://juejin.im/post/5cc19374e51d456e781f2036

简介

性能优化的目的不是为了优化而优化,而且为了以后不再优化, 给自己统一 一个标准。
这里也许会有人问 APP 启动还需要优化吗?启动又不是我们自己写的代码,难道 Google 工程师会犯这么低级的错吗?其实这还真不是 Google 的错,应该说是给我们开发者留了一个坑吧。应该有的同学知道是怎么一回事儿了,当我们在系统桌面任意点击一个 APP 是不是会发现启动的时候有一瞬间有白屏出现(以前老版本是黑屏) 那么我们怎么来优化这个黑白屏的问题勒,现在我们先来了解一下 Android 手机重开机到启动 APP 的过程吧。

APP 启动流程

这里会设计到 Android 系统源码的知识,但并不会深入解析源码,我们只是了解一个过程,因为太深入我自己也懵
系统的启动
我在这里大致分为了 6 个步骤,下面以流程图为准
在这里插入图片描述
启动步骤

  1. 首先拿到一部 Android 系统的手机打开电源,引导芯片代码加载引导程序 BootLoader 到 RAM 中去执行。
  2. BootLoader 把操作系统拉起来。
  3. Linux 内核启动开始系统设置,找到一个 init.rc 文件启动初始化进程。
  4. 进程初始化和启动属性服务,之后开启 Zygote 进程。
  5. Zygote 开始创建 JVM 并注册 JNI 方法,开启SystemServer。
  6. 启动 Binder 线程池和 SystemServiceManager,并启动各种服务

Launcher 启动
App Appcation 启动
1.手机回到系统桌面, 通过 adb shell dumpsys window w |findstr / |findstr name= 来查看当前的进程和 Activity 名。在这里插入图片描述
2.当点击桌面 APP 图标的时候会走 Launcher . java 的 onClick (View view) 方法,详细见下图。在这里插入图片描述

startActivity(intent) 会开启一个 APP 进程

3.AcitivityThread main() 调用执行流程,见下图
在这里插入图片描述最后 ActivityThread main() 是通过反射来进行初始化的

4.ActivityThread.java 做为入口,详细解说 main() 函数,还是以一个动画来演示一下吧;在这里插入图片描述

根据上面的动画,大家应该已经明白 ActivityThread.java main() 方法中 Appcation onCreate() 的是怎么被调用起来的吧
注意:
不知道大家有没有注意 ActivityThread main() 中 Looper.prepareMainLooper(); 其实咱们为什么能够在 Main Thread 中创建 Handler 不会报错了吧,是因为 Activity 启动的时候在这里已经默认开启了 Looper。
下期是黑白屏,敬请关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值