App的快速启动及启动时白屏问题解决方案

当我们退出APP的时候,重写back键我们不要写finish或者exit(0),而是使用:

App的快速启动及启动时白屏问题解决方案

这样的效果会和按Home键一样,把程序放在了后台运行,而不是杀死程序,这样就实现了二次启动时候的秒启动效果,但是,当我们第一次启动App的时候,就无法使用这种方式了,文中介绍了对App启动的优化,这里就不一一赘述了。

WindowBackGround,是我们秒启应用的最后一层障碍,

其实在创建App进程时,android系统会为你立即显示一个background window,然后再去创建app进程,当app完成first draw时,会立即由你的MainActivity(即默认启动的Activity)替换掉它。这里的background window就是上文WarmStart中提到的blank screen。谜底到此解开所谓的秒开原来就是视觉欺骗。。。所以说有人给你说他只是仅仅是优化生命周期内初始化代码达到秒开都是扯淡。但不得不承认这样用户体验大大的提升了,一点击launcher就渲染好一个背景图片,给用户一种已经启动的感觉,前面做的一系列优化,不过为了让用户少看一会儿系统给渲染的black window。

那为什么我们的APP会出现在系统桌面上停留一会,而不是渲染背景图呢?原来在项目创建时,系统会为launcherActivity默认了一个LightTheme,这样就会导致App点击启动后会白屏一段时间然后展示自己的Activity,为了解决白屏的问题把theme主题换成透明的就像下面

App的快速启动及启动时白屏问题解决方案

但其实这样虽然解决了白屏的问题,但是就会出现上文所说的,点击后停留在桌面一会儿,直至MainActivity渲染出来。这是大部分App的做法,但并不是最佳解决方案。

WindowBackground最佳解决方案:

应该由windowBackground此属性作为你的品牌推广页或者logo页,如果你的SplashActivity完全不需要做任何初始化,只是希望有个闪屏页,完全可以由windowBackground来满足。

1.设置自定义带windowBackground的Theme

App的快速启动及启动时白屏问题解决方案

前两行代码是设置Theme不透明并且默认渲染的背景图是我们必看影视闪屏页的图片。

  • windowBackground:关键,主要设置你想要的背景图或者是动态自绘的drawable皆行,这个视图会在你冷启动时渲染给用户过渡看。

  • windowFullscreen:全屏展示,免得顶部状态栏显现颜色不一致过于脱节和突兀

2. 为你的launcher Activity设置你的启动Theme

App的快速启动及启动时白屏问题解决方案

3. 在Launch Activity启动后再把主题设置回自己的AppTheme

App的快速启动及启动时白屏问题解决方案

此时你的App就能完成秒开了!

参考了:https://mp.weixin.qq.com/s/a8076txSPIUqGAbe30uEug