启动时,会出现黑/白闪屏问题的解决"/>
Android App桌面启动时,会出现黑/白闪屏问题的解决
先看两幅动图:斗鱼&B站
有的App,每次启动的时候,是直接进入这个启动页面。如图1;有的App会先白屏停顿一下后再进入启动页面(Splash),如图2;
很多时候,我们启动APP时会有短暂的白屏或者黑屏,大概1~2秒后,才会显示主界面或者显示启动页,这是为什么呢?本篇文章来介绍一下,并给出APP启动秒开的解决办法。
一、原因分析
当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程,但进程的创建与初始化都需要时间,在这个动作完成之前系统要做什么呢?如果没有任何反应的话,如果程序初始化的时间很长,用户可能还以为没有点到相应的位置。但此时所启动的程序还没初始化完,既无法显示程序,又不能停在原处不做任何动作,怎么办?这就有了Starting Window的概念,也可以称之为Preview Window。
Starting Window就是一个用于在应用程序进程创建并初始化成功前显示的临时窗口,拥有的Window Type是TYPE_APPLICATION_STARTING。在程序初始化完成前显示这个窗口,以告知用户系统已经知道了他要打开这个应用并做出了响应,当程序初始化完成后显示用户UI并移除这个窗口。
显示白屏或者黑屏,是由你的启动Activity或者Application来决定的。如果你使用的是Light主题,那么就可能出现白屏;如果你使用的是Black主题,那么就可能出现黑屏。当你设置Light或者Black主题时,Starting Window显示的就是你启动Activity的android:windowBackground属性,所以才会出现白屏或者黑屏的情况。
二、解决办法
1、定义纯颜色背景或者图片
a、纯颜色,直接设置android:windowBackground属性为颜色代码:
<item name="android:windowBackground">@color/colorAccent</item>
b、图片, 需要在Drawable中定义一个splash.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android=""> <!-- 背景颜色 --> <item android:drawable="@color/green" /> <item> <!-- 图片 --> <bitmap android:gravity="center" android:src="@drawable/icon_welcome" /> </item>
</layer-list>
2、设置style.xml
a、设置背景图Theme
<style name="Theme.AppStartLoad" parent="android:Theme"> <item name="android:windowBackground">@drawable/ipod_bg</item> <item name="android:windowNoTitle">true</item>
</style>
b、
设置透明Theme
<style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item>
</style>
上面我定义了两种Theme,第一种Theme就是设置一张背景图。当程序启动时,首先显示这张背景图,避免出现黑屏。第二种Theme是把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始化完才一次性显示出来。
3、修改AndroidManifest.xml
为了使上面Theme生效,我们需要设置一些Activity的Theme<applicationandroid:allowBackup="true"android:icon="@drawable/ipod_icon"android:label="@string/app_name"android:launchMode="singleTask"><!-- iPod主界面 -->
<activityandroid:name="com.apical.apicalipod.IPodMainActivity"<!-- 使用上面定义的样式-->android:theme="@style/Theme.AppStartLoad"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>//......</application>
完!!!
更多推荐
Android App桌面启动时,会出现黑/白闪屏问题的解决
发布评论