相信做app的每个人都遇到过,自己的app在启动的时候,会出现白色或黑色的屏幕,然后过几秒后,正常进入应用。这个不影响用户使用,但是体验不是那么的友好,那这个该如何解决会更友好呢?下面进入正题
1.为什么会出现黑白屏呢?
当我们点击桌面图标时,系统会进行zygote一个应用进程、应用的初始化等一系列工作,这些都是需要耗时的。那么这段时间内,用户会觉得“延迟”响应(或卡顿),为了解决这个问题,google就默认启动一个空白的页面,以便响应用户操作。
如果你的应用application 或者launcher activity 启动比较慢,比较耗时,没有将系统的backgroundWindow替换掉,就会出现了黑白屏。那么这个黑白屏到底是黑色还是白色,取决于你选择的应用的Theme ,如果是Dark 就是黑色,反之Light 就是白色。
2.优化方案
很多app都采用修改Theme的方式来优化这个黑白屏的体验。(以图片为例)
2.1 准备图片(welcome_logo.png为你想展示的内容)
2.2 新建一个展示图片的drawable 文件(welcome_bg.xml)
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white"/>
<item>
<bitmap
android:gravity="center"
android:scaleType="centerCrop"
android:src="@drawable/welcome_logo"></bitmap>
</item>
</layer-list>
注:此处也可以修改成动画等其他效果的。
2.3 自定义Theme
在styles.xml中添加自定义的Theme,如下:
<style name="AppTheme.Launcher">
<item name="android:windowBackground">@drawable/welcome_bg</item>
<item name="android:windowFullscreen">true</item>
</style>
注意:上面的drawable ,为第二步自定义的图片drawable
2.4 引用自定义的Theme
<activity
android:name=".LoginActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Launcher">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2.5 最重要的一步
在上一步将启动页面的Theme 设置为我们自定义的了,那么启动结束后是不是需要修改回来呢?那是必须的。
重要的事情说三遍
重要的事情说三遍
重要的事情说三遍
在Launcher Activity的onCreate(Bundle savedInstanceState)方法调用super.onCreate();之前使用setTheme()来修改回去。
@Override
protected final void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Activity_Translate_anim);
super.onCreate(savedInstanceState);
mDataBinding = DataBindingUtil.setContentView(this, getLayoutResId());
}
好了完成上述步骤,就可以实现启动体验优化了,但是这只是其中一个方案,有更好的方案,欢迎留言。