Android性能优化学习之App启动性能优化

在用户打开app的时候,第一个能够给用户产生好的印象的就是app的启动速度了。

随着一个App的业务量越来越复杂,模块越来越多,app的启动速度就会不可避免的受到影响,有的甚至会产生黑屏或者白屏一段时间的现象,让我们细想一下,用户在点开app,app一直处于这种黑白屏的情况,要是我是我用户,很有可能会在心里对这个app有深深的抵触心里。所以,提高一个app的启动速度,是很有必要的一件事情。

既然我们要来优化app的启动速度,那么就必须要了解一个app的启动流程和一些基础知识。

app启动分为冷启动和热启动:
冷启动:当用户点击桌面的app图标时,Android系统会为当前的app开启一个进程,用来运行当前的app。(这种启动方式大多出现在当前app在后台中没有存货的进程的情况下)
热启动:当前app在系统中存在着进程,这时候,系统就不会为其再分配一个进程了。而是使用当前已经存在的线程。(这种启动方式一半出现在需要启动的app退居在系统后台,而没有被杀死的情况下)

app启动的流程:
app启动的流程,可以分为Application启动的启动流程和Activity启动加载的流程。
Application:在系统开启app的过程中,系统会创建一个Application对象,其生命周期和app应用的生命周期是一样的,也是一个应用中生命周期最长的一个对象,同时,其还是一个单例对象。
在Application创建过程中,attachBaseContext(Context base)(该方法是得到应用上下文的context对象)和onCreate方法是一定会被执行的,而其他的一些方法,只会在一些具体的时机情景下才会去调用。

Activity:activity的生命周期,我们这里就不多说了,相信大家都非常熟悉了。
在activity执行到onStart的时候,说明页面已经是一个可见状态了,所以我们将关注点往前移到onCreate方法中,在onCreate方法中,系统会去加载布局,除此之外,好多同学都会在onCreate方法中做一些耗时操作。这些耗时操作就会影响app的启动速度。

所以综上来说,我们来优化app的启动速度,可优化的点就是在Application和activity的onCreate方法中尽量少做事情。

相信很多同学,都跟我一样,在Application中做一些初始化的操作,如地图的定位,网络请求框架的初始化等等一系列事情。

下面是一些解决的方案:
1:我们给系统设置一个主题,在系统启动的过程中,会显示我们的主题背景,例如一张展现公司的logo,这样的话,就不会出现黑白屏的情况。这是因为在系统冷启动的过程中,有一段冷启动事件,该时间段是从用户点击app开始算起的,到系统调用Activity.onCreate()之间的这段时间,若是我们设置了app的主题,那么在这段时间内,WindowManager会先加载我们的主题中的background作为展示,然后再去加载启动的activity中的布局。

2:这种方式也是腾讯现在在用的,就是在系统主题中关闭预览:

<item name="android:windowDisablePreview">true</item>

这是一种延时启动界面的策略,该种方式不好的地方在于,当我们点击app图标时,可能暂时不会有反应,(但其实已经在运行了),给人一种没启动的错觉。

3:尽量少的在Application和Activity的onCreate方法中做初始化操作。
例如像初始化网络加载框架这样的操作,我们可以使用懒加载的策略来处理。
即当我们在第一次需要去加载网络数据的时候再去初始化加载框架,这虽然会在第一次加载网络数据的时候回稍微慢点,在后面的加载中就不会有其他问题,这也是目前我觉得最好的一种优化方式。还有就是延时加载等操作。

在初始化的代码中,我们可以使用TranceView来分析占用时间长的代码是哪些。具体的操作方式这里就不多说了,给大家准备了一片专门介绍的文章,下面是链接(若有版权问题,请告知,本人速度删除,谢谢!):
http://www.ituring.com.cn/article/273967

最后,我们可以尝试多种方法结合在一起做优化,可能会有更好的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值