起因
今天逛博客逛着逛着发现了这样一篇博文:
Android性能优化典范(六),发现LogCat里面有一个可以看见App启动时间的Log输出:
于是我将过滤条件调成Displayed 发现自己做的app的启动时长总是在2分半到三秒钟不等,而其他App都能在1秒之内快速响应。为什么会这么慢呢?
我查看了一下LoadActivity和
MainApplication发现MainApplication里有很多的初始化代码并且公司要求在App启动时要访问服务获取有无更新信息。这就导致了启动时间很长的情况出现。
并且发现一个现象:
在启动QQ、微信等应用的时候很快就能进入导航页面,在我应用启动的时候白屏1-2秒过后我的启动页面显示了不到0.5秒的时间就跳转了!我琢磨着之前这个白屏时间是不是
MainApplication里的代码跑的太长时间了?于是我将MainApplication里的初始化移到了我的LoadActivity里,运行程序,还是一样!Why?
不是应该先显示界面再运行初始化操作么?于是我将初始化的代码又移到了LoadActivity生命周期的onStart和onResume两个方法里,还是一样。这就很尴尬了!
带着这个疑问,查找度娘给了我答案:
白屏是要等你的启动Activity跑完onCreate和onResume才会显示界面。
解决
之前博文提到了:
对于启动闪屏,正确的使用方法是自定义一张图片,把这张图片通过设置主题的方式显示为启动闪屏,代码执行到主页面的onCreate的时候设置为程序正常的主题。
只给了两张图,并看不懂什么意思。于是翻到了这样一篇博文http://blog.csdn.net/zivensonice/article/details/51691136
跟我遇到的问题一毛一样...
解决方法:
先在资源文件drawable文件夹下创建一个background_splash,xml并编写如下代码:
<?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秒多白屏的问题..
这个优化还是很有必要的
参考博客:http://blog.csdn.net/zxm317122667/article/details/51000728