本篇文章已授权微信公众号AndroidChinaNet(Android开发中文站)独家发布
在做食生活的项目时,曾遇到也启动页加载很慢,白屏。不知道是什么原因,后来换了一种思想,这个思想也用在了我的另一个项目里,感觉还挺实用的,现在将其总结余一下分享给大家(图片中有一个优化方法哦!)。
(1)Instant Run造成的白屏或者黑屏现象
Instant Run是用来做什么的?就是你点击是用来提升开发效率的,在Android Studio 2.0及以上有了很大改善,使用instant run,在第一次运行之后,就可以快速的在真机中看见修改后的结果,不仅仅是UI可以直接显示,还包括代码逻辑。不用再苦苦等build了!也就是说,只有在开发阶段才会有Instant Run这个东西,在正式的产品中是完全不存在Instant Run的!
所以如果你是直接点击按钮啊或者是debug版本的时候出现白屏或者黑屏,最好生成一个release版的程序就不会出现这种现象了。
(2)App的启动过程
如果想要优化我们的app,那么我们就要深入他,理解他。下面,简单解释一下Activity的启动过程:
1.Application 构造方法
2.attachBaseContext()
3.onCreate()
4.入口Activity的对象构造
5.setTheme() 设置主题等信息
6.入口Activity的onCreate()
7.入口Activity的onStart()
8.入口Activity的onResume()
9.入口Activity的onAttachToWindow()
10.入口Activity的onWindowFocusChanged()
根据上面的信息,我们就能得到一些额如何减少应用启动时的耗时的信息了,是不是很一目了然?
针可上面的过程我们来思考,采取以下策略:
1、在Application的构造器方法、attachBaseContext()、onCreate()方法中不要进行耗时操作的初始化,一些数据预取放在异步线程中,可以采取回调的方法来去实现。
2、对于sp的初始化,因为sp的特性在初始化时候会对数据全部读出来存在内存中,所以这个初始化放在主线程中不合适,反而会延迟应用的启动速度,对于这个还是需要放在异步线程中处理。
3、对于MainActivity,由于在获取到第一帧前,需要对contentView进行测量布局绘制操作,尽量减少布局的层次,考虑StubView的延迟加载策略,当然在onCreate、onStart、onResume方法中避免做耗时操作。
优化应用启动时的体验
对于应用的启动时间&#x