性能优化--启动黑白屏优化

相信大家都会有这样的经历,就是新创建的项目运行app后,发现会出现短时间的白屏或黑屏,然后才进入主界面。为什么会出现这样的现象呢?谷歌工程师出于怎样的考虑呢?我们该如何解决呢?基于这样几个问题,开始分析。

一、手机启动流程

在这里插入图片描述
当我们点击开机的时候,首先会通过引导芯片启动Linux内核,通过它会创建init进程,然后孵化出Zygote进程。然后Zygote进程孵化出SystemServer进程,初始化JVM虚拟机。然后初始化AMS\PMS等系统服务,最后才看到桌面的Launcher界面。具体得内部实现原理这里不做分析,大家只需要大致了解流程即可。

二、app启动方式

1、冷启动

程序重新开始,系统没有为该app创建进程。一般是在app第一次启动或者应用程序被系统完全清理。

1、热启动

程序依然存在内存中,只是从前台到后台。使用热启动不会走onCreate()方法,所以能够避免重复的布局的加载和渲染。需要注意的是如果程序被系统清理了,使用暖启动需要重新初始化一些对象,防止空指针的出现。

1、暖启动

它包含冷启动和热启动一些列的操作子集,比热启动消耗稍微多一点,它与热启动最大的区别是它必须调用onCreate()方法重新初始化操作,也可以从onCreate()方法保存的实例来获取某些对象的恢复。比如onCreate()方法参数中的Bundle对象,就可以存储一些对象。

三、冷启动流程

  • 加载并启动app
  • 为app创建一个空白的窗口
  • 创建app进程
  • 创建主activity
  • 加载布局、绘制

由于在启动的过程中需要一系列的耗时操作,所以在冷启动的过程中会为app添加一个空白的窗口,防止用户感觉到明显的卡顿。这也是出现黑白屏的原因,黑白屏的颜色是根据Theme的颜色来定的。

四、黑白屏解决方案

1、方案1
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark"><
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值