性能分析之ClassLoader.getResourceAsStream

在传统Java中,我们常使用ClassLoader.getResourceAsStream 通过资源名称来获取资源,但是在Android中,使用该方法会对性能产生非常大的影响,在有关统计中,最高可以延时达到2000ms以上,所以对于Android应用,强烈建议使用安卓提供的Resources.get*(resId) 函数,这么关于如何计算一个函数的处理时间,我们后面会介绍。

为什么ClassLoader.getResourceAsStream 对性能有那么严重的影响?

关于这个问题,我们只要理解该方法的执行过程就一目了然了:
(1) 以 zip 压缩包的方式打开 APK 文件,为 APK 内的所有内容建立索引;
(2) 再次打开 APK 文件,并再次索引所有的内容;
(3) 校验 APK 文件被正确的进行了签名操作。
都是一些非常耗时的操作,导致了该方法在Android上不被推荐

为什么推荐使用Resources.get(resId) 方法?

这个问题,其实很好理解,Android对资源文件会提前做好单独的索引和加载机制,调用改方法是,只需要按图索骥就可以,不涉及压缩和签名等问题

详细请参考:揭秘在安卓平台上奇慢无比的 ClassLoader.getResourceAsStream,在项目中遇到了性能问题,故记录之。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值