文章目录

前言

你的应用是否出现过,启动后白屏、黑屏、响应慢等问题?

想不想像微信、QQ那样秒启动?

想学吗?

我教你呀,哈哈哈哈哈

一、为什么会出现黑屏、白屏?

这一切还得从android进程的起源说起:据说,在很久很久以前… …

简单来说,在android系统中,有一个女娲级的进程叫zygote,它是Android系统上所有应用进程的父进程,所有应用运行的进程,都是由zygote一手创建起来的。

但是,进程也不是一天建成的,那都是需要Time的!当用户马大爷点击了应用启动图标,zygote就会开始日夜赶工的创建进程,但是就是这么点间隙,如果android系统不给点什么反映,马大爷就会以为自己没点到,这会严重挫败马大爷的自信心呐,于是,android系统必须给个反映:

系统会根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。这个黑(白)屏的界面,就是PreviewWindow,即预览窗口。

二、怎么解决?

既然女娲创建进程需要时间,系统也给女娲了时间,只不过,给的方式有点丑陋,那我们能不能美化下呢?也就是那个PreviewWindow的展示界面能不能好看些呢?或者说,能不能换成自定义的页面呢?

上帝既然为你创造了双脚,你必定可以买到合适的鞋!

直接在AndroidManifest.xml中的启动类添加Theme

@drawable/splash

true

false

1.图片变形怎么办?

2.出现留白怎么办?

3.跳转动画如何去掉?

哪儿那么多为什么,一次性解决所有问题:

很多博客说,使用.9啊。亲测,无效。(可能我测的姿势不对)

4.解决办法

使用layer-list,才是解决问题的关键。

比如下面这种情况的闪屏页面,使用layer-list是最优解:

android:windowBackground 设置时不使用原图,而是使用layer-list

同时,将闪屏页界面元素进行合理拆分,如下

theme:

@drawable/layer_splash

true

false

@style/Animation_No

true

layer_splash.xml: 顶部距离,底部距离自己把控

android:opacity="opaque">

android:gravity="fill"

android:src="@mipmap/splash_bg" />

android:gravity="top|center_horizontal"

android:src="@drawable/test_splash_title" />

android:gravity="top|center_horizontal"

android:src="@drawable/test_splash_center" />

android:gravity="bottom|center_horizontal"

android:src="@drawable/test_splash_logo" />

Animation_No:

@null

@null

@null

@null

@null

@null

@null

@null

@null

@null

@null

@null

具体示例如下图:

splash_bg是渐变背景,由于UI设计了渐变色,只能也使用图片了(可以用.9)

test_splash_title是顶部的标题栏(应用名称,别惊讶,总有老板会把名字放这里的)

test_splash_center是中间的图片,注意,图片一定是不带背景颜色的,这样效果好。

test_splash_logo是底部的小太阳

3a230f1f251c51769b1883f03ff35f8d.png

三、看看别人家的应用

1.Bilibli

B站的手机客户端,做的还是不错哒。

仔细看了下他家APP启动,猜测逻辑应该是这样,theme中的windowBackground应该是只设置了底部的logo,并使用了纯白背景,而后,启动页的真实activity的layout文件,应该是底部logo,中间添加了二次元图片。所以在启动哔哩哔哩时,会先显示底部logo纯白界面,后显示二次元+底部logo的界面。

29ba0aa0d25f9f8c77ae25210142d46b.png

但是 但是 但是,这种做的好了就是B站的那种效果,做的不好,就是下面这种效果了!!

1dc6d734dbb835a40ce57fdd63b6fbeb.png

睁大眼看清楚,丁香妈妈那四个字,是不是有一个下移的效果。

这可不是开发专门做的特效,这应该是个bug,哈哈哈

而且,我发现滴滴,竟然也有这种问题!!!

这种明显的问题,测试肯定会问你的,能不能把这个特效去掉?!

当然可以的啦!

关键在于,theme中的layer-list的布局与启动页activity中的布局保持一致的同时,而且,要保证启动页也是全屏展示,即theme中也带有windowNoTitle和windowActionBar的属性

true

false

如果你没带这俩属性也显示正常,那么敲敲的告诉你,你把你的手机虚拟按键隐藏了你再看看试试!!!

总结

虽然说,解决了问题,但是说到底其实是个障眼法而已,三脚猫功夫。真正应该做的是优化启动逻辑,不能有了障眼法,就不去优化启动逻辑了。毕竟用户真正想要的是以最快的速度进到主应用、主界面,如果启动让用户等待太长时间,那这个应用估计很快就gg了。

自己铲平经理从远方喊话:

你看看人家支付宝,多大体量的APP,人家那启动时间,那基本上就来不及我反应,人家就打开了!再看看咱们自己的应用,搁这儿没睡醒呢还!!!!

不说了,不说了,赶紧跑路了。。。。。。

标签:layer,启动,欢迎,splash,logo,白屏,null,黑屏

来源: https://blog.csdn.net/sinat_26710701/article/details/114697320

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐