起因


今天逛博客逛着逛着发现了这样一篇博文: Android性能优化典范(六),发现LogCat里面有一个可以看见App启动时间的Log输出:




Android 卡机 led 闪_android




于是我将过滤条件调成Displayed 发现自己做的app的启动时长总是在2分半到三秒钟不等,而其他App都能在1秒之内快速响应。为什么会这么慢呢?


MainApplication发现MainApplication里有很多的初始化代码并且公司要求在App启动时要访问服务获取有无更新信息。这就导致了启动时间很长的情况出现。



并且发现一个现象:


MainApplication里的代码跑的太长时间了?于是我将MainApplication里的初始化移到了我的LoadActivity里,运行程序,还是一样!Why?

不是应该先显示界面再运行初始化操作么?于是我将初始化的代码又移到了LoadActivity生命周期的onStart和onResume两个方法里,还是一样。这就很尴尬了!


白屏是要等你的启动Activity跑完onCreate和onResume才会显示界面。



解决


之前博文提到了:


对于启动闪屏,正确的使用方法是自定义一张图片,把这张图片通过设置主题的方式显示为启动闪屏,代码执行到主页面的onCreate的时候设置为程序正常的主题。




只给了两张图,并看不懂什么意思。于是翻到了这样一篇博文




跟我遇到的问题一毛一样...




解决方法:




<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@android:color/holo_blue_light">
    </item>

    <item>
        <bitmap
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:src="@drawable/load_bg" />
    </item>

</layer-list>


这里是给他背景设置成蓝色,然后外加一张图片,这张图片可以拿你启动页的图片过来用


然后写一个自己的启动闪屏主体


<!-- 启动闪屏主题 -->
    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>


最后给你的启动页加上这个主体即可


<activity   
            android:name="com.tyh.LoadActivity"  
            android:theme="@style/SplashTheme">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
</activity>

你甚至是可以不需要setContentView都可以!


这样一来,避免了用户等待2秒多白屏的问题..

这个优化还是很有必要的