UI一步一步性能优化

APP性能优化--启动黑白屏体验优化

2020-10-30  本文已影响0人  初夏的雪
相信做app的每个人都遇到过,自己的app在启动的时候,会出现白色或黑色的屏幕,然后过几秒后,正常进入应用。这个不影响用户使用,但是体验不是那么的友好,那这个该如何解决会更友好呢?下面进入正题

1.为什么会出现黑白屏呢?

当我们点击桌面图标时,系统会进行zygote一个应用进程、应用的初始化等一系列工作,这些都是需要耗时的。那么这段时间内,用户会觉得“延迟”响应(或卡顿),为了解决这个问题,google就默认启动一个空白的页面,以便响应用户操作。

如果你的应用application 或者launcher activity 启动比较慢,比较耗时,没有将系统的backgroundWindow替换掉,就会出现了黑白屏。那么这个黑白屏到底是黑色还是白色,取决于你选择的应用的Theme ,如果是Dark 就是黑色,反之Light 就是白色。

2.优化方案

很多app都采用修改Theme的方式来优化这个黑白屏的体验。(以图片为例)

2.1 准备图片(welcome_logo.png为你想展示的内容)

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());
}

好了完成上述步骤,就可以实现启动体验优化了,但是这只是其中一个方案,有更好的方案,欢迎留言。

上一篇 下一篇

猜你喜欢

热点阅读