Crash与Multidex

1.捕获应用的crash信息

原理:

当crash发生时,系统会回调UncaughtExceptionHandler的uncaughtException()方法;

Thread类中提供了一个设置系统默认的异常处理器方法;

在这里插入图片描述

使用multidex解决方法数越界

原因:在Android中单个dex文件所能够包含的最大的方法数为65536

范围:包含Android FrameWork、依赖的jar包以及应用本身的代码中的所有方法;

越界异常:

UNEXCEPTION TOP-LEVEL EXCEPTION

com.android.dex.DexIndexOverflowException:method ID not in{0,
0xfff}:65536

解决方法:

首先,删除无用的代码和第三方库;

其次,可考虑采用插件化的机制来动态加载部分的dex,但插件化是一套重量级的技术方案,并且需兼容性问题,不适合用来解决方法数越界;

推荐使用multidex (Google提出)

multidex:

Android5.0开始默认支持(之前版本需要引入支持库android-support-multidex.jar)

在defaultConfig设置multiDexEnabled true;引入multidex库;继承MultiDexApplication,并在attachBaseContext()中设置MultiDex.install(this);

可在build.gradle添加afterEvaluate,在它的区域内部采用了–main-dex-list选项来指定主dex中要包含的类。

注意:multidex的jar包中的类必须也要打包在主dex中

局限性:

  1. 应用启动速度降低,甚至出现ANR现象,避免生成较大的dex文件;
  2. 由于Dalvik LinearAlloc的bug,可能导致其应用无法在Android4.0以前的手机上运行,还可能出现产生大量内存消耗的情况(很少出现)

解决方法:做大量的兼容性测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值