启动速度优化总结(下)

1、背景

我们继上一篇介绍如何计算启动时间以及工具的使用后,我们现在结合输入法项目通过TraceView来讲解优化过程。

2、分析

  • Multidex的使用
    通过使用TraceView分析trace文件,发现Multidex调用的方法比较耗时。
    MultiDex工作在主线程,而Dex的提取与DexOpt的过程都是耗时的操作,所以ANR的问题是必然存在;
    拆分出来的Dex越多,对应ANR的几率也就越高。所以Multidex不光会拖慢启动速度,而且严重的时候会导致应用ANR。
    值得一提的是Android 5.0 以及更高版本使用ART,所以不存在由于分包的原因导致首次启动比较慢的问题,
    ART 在应用安装时执行预编译,扫描 classesN.dex 文件,并将它们编译成单个 .oat 文件,供 Android 设备执行。
    如果您的 minSdkVersion 为 21 或更高值,则不需要添加分包支持库。
    对于Android 5.0以下的设备由于分包导致的启动比较慢的问题,只能通过减小包体减少方法数,从而使得在apk中的dex文件不需要进行分包来解决问题。
  • 数据库初始化
    通过分析trace文件,以下初始化方法调用耗时较大:
    1.GoKeyboardDataProviderEmoji.onCreate()
    2.AdSdkApi.initSDK()
    其实它们有个共性,就是都使用到了数据库。 在GoKeyboardDataProviderEmoji.onCreate()和AdSdk.init()都会创建一个DatabaseHelper对象,在DatabaseHelper 的构造函数中都会调用getWritableDatabase(),我们看下getWritableDatabase()这个方法的注释:
/**
    *Create and/or open a database that will be used for reading and writing.
    * The first time this is called, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值