ARTHook 优雅检测不合理图片

241 篇文章 5 订阅

1、

2、

对于Bitmap来说,它对于内存优化至关重要,因为图片非常地耗内存。而且Bitmap的内存模型是经过了平台的变化的。在API10之前Bitap自身存在Dalvik Heap中,但是与之相关联的像素存在Native中。这样有一个好处是像素存在native中不占用java层的内存。OOM 不会发生在native当中。这样有一个不好的地方,比如java中的bitmap已经被回收掉了,但是在native中的像素并不知道,就是说回收时机并不确定。在API10之后像素也被放到了Dalvik Heap中。也就是二者被放在了一起。就是说Bitmap被回收了,这些像素也就被回收了。在API26之后,谷歌通过一种更优的方式,继续将像素存在了native中。相当于加了一种机制,在java层bitmap被回收了,可以很迅速地通知到native层。

3、

获取Bitmap占用的内存:

有几个方案,第一点:对Bitmap这个类来说,它有一个方法getByteCount(),这个方法直接返回了这个Bitmap自身所占的内存。但是这种情况是需要在运行时动态算出来的。

第二种方式:宽*高*一像素占用的内存。一般情况下,该方式计算出来的就是bitmap所占用的内存,但是有例外。比如说,放在资源目录里,res目录里面,此时需要*压缩比例。

 

4、

可以继承一个ImageView,覆写onDraw()方法,绘制时进行判断,判断控件的宽度、高度,比对一下这个控件绑定的bitmap,它的宽度和高度,进行一下对比。如果说比例超过了一定的限制,可以给一个警告。

也可以给imageview加一个predraw()listemer,也就是在绘制之前加一个回调。

5、

6、

7、

 

8、

9、

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值