美文网首页
android 64K/65K问题 简单记录

android 64K/65K问题 简单记录

作者: 小面包屑 | 来源:发表于2016-08-03 16:05 被阅读0次

    到底是65k还是64k?


    都没错,同一个问题,不同的说法而已。

    65536按1000算的话,是65k ~ 651000;

    65536按1024算的话,是64k = 641024。

    方法数不能超过65536 , 2的16次方。因为在Dalvik指令集里面,执行方法的invoke-kind  index 大小只给了16bit 。

    使用了Google提供的解决方案, MultiDex 。  (另一个方法: compiling with Jack toolchain )

    一般apk解压之后只有一个class.dex文件,使用了MultiDex之后有两个、三个 或者 N个。

    编译过程:

    sourceCode  ---Java Complier ---> .class Files ---Dex--> .dex files  (class.dex)

    Application.attachBaseContext 执行MultiDex.install() 。

    首次启动会对 class.dex/class2.dex文件执行 dexopt操作,生成ODEX文件。

    非首次启动则直接从cache中读取已经执行过dexopt的ODEX文件。

    问题:

    安装时间长。

    执行时间过长会出现ANR。

    兼容性为android 4.0 以上。

    5.0以后的机器,ART会把多个dex合并成oat文件。

    android 2.2 或 2.3 的缓存只有5M,4.x提高到了8m或者16m

    异步动态加载方案:

    增加一个process(进程)来异步加载dex,在attachBaseContext里面轮询,看是否进程存在,是否已经加载完成。

    加载完成后,进入Application的onCreated() 方法。

    相关文章

      网友评论

          本文标题:android 64K/65K问题 简单记录

          本文链接:https://www.haomeiwen.com/subject/rzwqsttx.html