Android性能优化--Android启动页优化

作者: 光锥外 | 来源:发表于2018-10-11 17:27 被阅读52次

    App启动方式:

    (1)冷启动:当启动应用时,后台没有该应用的进程,系统会重新创建一个新的进程分配给该应用,即冷启动。
    (2)热启动:当启动应用时,后台已有该应用的进程(点击Back键或Home键退出,此时应用的进程依然在后台存活),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,即热启动。

    启动APP时出现白屏或黑屏:

    其实,黑屏或者白屏这里并不是不正常,而是还没加载到布局文件,就已经显示了window窗口背景,而在应用程序进程创建并初始化成功之前,系统会显示一个临时窗口Starting Window(也称作:Preview Window,它的WindowType是TYPE_APPLICATION_STARTING;在初始化完成之前展示,是为了尽快告知用户,系统已经知道他要打开该应用,并且已经对此做出了响应。待初始化完成后,系统会显示用户UI并移除该窗口)黑屏白屏就是window窗口背景。我们看到的黑屏或白屏就是不同Theme时对应的Window的背景。

    解决方案:

    使用透明主题:

    <style name="AppTheme.Launcher" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowIsTranslucent">true</item>
            <item name="windowNoTitle">true</item>
            <item name="android:windowFullscreen">true</item>
        </style>
    

    特点:应用启动慢,刷新同步,界面会一次性刷新出来。由于背景透明,初始化的过程中,用户看到的是桌面,给人一种点击之后稍等一会才一次性刷新出来的感觉。
    注:话说微信启动时使用的就是类似这样的效果,但微信做了一定的优化处理,只在 冷启动 时才显示启动页,具体如何实现稍后会做详细介绍。
    禁用Preview Window:
    既然APP启动时的黑白屏是由Preview引起的,那系统有没有提供禁用的方法呢? 答案是肯定的。修改上述style 如下:

    <style name="AppTheme.Launcher" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowDisablePreview">true</item>
            <item name="windowNoTitle">true</item>
            <item name="android:windowFullscreen">true</item>
        </style>
    

    然而,黑白屏的问题是解决了,但点击应用图标后会有一段时间没有响应。用户体验不好,违背了优化的初衷,不推荐使用。
    修改windowBackground属性(推荐):
    通过windowBackground可以设置背景色、背景图片、能解析出图片的XML文件等

    <style name="AppTheme.Launcher" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowBackground">@drawable/launcher_bg</item>
            <item name="windowNoTitle">true</item>
            <item name="android:windowFullscreen">true</item>
        </style>
    

    自定义layer-list: launcher_bg.xml 代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@android:color/white" />
        <item>
            <bitmap
                android:gravity="center"
                android:src="@drawable/launch_logo" />
        </item>
    </layer-list>
    

    特点:应用启动快,非同步刷新,界面会先显示背景图,然后再刷新其他控件,比较推荐。

    相关文章

      网友评论

        本文标题:Android性能优化--Android启动页优化

        本文链接:https://www.haomeiwen.com/subject/gkbvaftx.html