LZ-Says:话说真正负责项目后才发现,想要软件越来越好,就要从细节抓问题,去解决问题,这样我们的软件才会越来越好~
前言
今天下班路上闲的无聊随便点了几个app,包括正在负责的几个项目,突然发现怎么人家的启动时不会出现短暂白屏,而我自己负责的却会有短暂的白屏,瞬间感觉好不爽。先给大家瞅瞅效果吧。
时间虽然短暂,但是确实可以看到短暂的白屏现象,那么让我们一起去找找解决方案吧~
问度娘~
通过度娘搜索,我们可以得知,APP启动有俩种方式,分别为冷启动和热启动,头一次知道还区分这个,赶紧看看这俩个分别都是什么含义吧~
1.冷启动:
当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。
PS:在本项目中,启动大致流程为,首先实例化Application,然后实例化入口Activity,最后显示Activity2.热启动:
当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。
PS:由于在后台中存在当前的进程,So,直接从进程中启动,不需要重新创建Application,只需要实例化入口Activity即可。
简单分析
那么看到这里,也许有些同志知道该从何处入手,但是可能有的人也许就该问了,那么app启动方式和我们今天这个有什么关系呢?(LZ就属于第二种人,没辙啊~)
继续通过搜索,得知app在启动的时候会做一些操作,当然了,也可以理解为初始化相关内容,包括初始化我们的Application类,那么说到这里,免不了老生常谈的话语,尽量不要做耗时操作,如必须要做,做好加异步处理。所以说是这些东西导致我们app出现短暂的白屏。那么,简单了解之后,让我们一起开始动手解决吧~
解决问题~
网上看到大家一般都是使用以下俩个方式去优化这个问题,具体如下:
- 设置要启动的Activity主题为透明,可以给用户造成一个视觉上的假象;
- 为要启动的Activity设置主题为一张背景图;
。。。 。。。
原理都差不多,都是设置相关主题,那我们直接按照第一种方式简单有效实现吧~
在Style中设置透明
<style name="AppTransparentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
启动的Activity中主题设置为以上Style
<activity
android:name=".MainActivity"
android:theme="@style/AppTransparentTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
最直接查看效果
结束
好了,到此为止,简单介绍到这里~感谢大家观看~