购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3.3 Bitmap泄漏优化

除了对超大的Bitmap进行自动化的检测和优化,另一个经常采用的Bitmap优化方案便是Bitmap泄漏治理。虽然Bitmap最终是在Native层创建的,但是Bitmap的泄漏治理实际上可以转换成Java对象的泄漏治理,因为Bitmap使用了Android所提供的辅助自动回收Native内存技术,所以我们只需要在Java层中将Bitmap的Java对象清除,Native层中申请的内存会自动完成释放。

下面是Bitmap的构造函数,其中的NativeAllocationRegistry对象会将该Bitmap的Java层和Native层绑定起来,当Bitmap的Java对象因为GC被回收后,NativeAllocationRegistry可以辅助回收该Bitmap对象所申请的Native内存。

NativeAllocationRegistry可以帮助我们更好地避免Native层的内存泄漏问题,在进行Android的Native开发时,笔者建议大家尽量使用该技术来减少内存问题。总的来说,当Java层的Bitmap释放后,Native层的Bitmap也就释放了,知道了这一点,我们只需要寻找在Java层发生泄漏的Bitmap对象,然后通过置空来回收即可。

此时寻找泄漏的Bitmap就很容易了,和寻找泄漏的Java对象一样,当业务结束后,手动执行GC以捕获Hprof文件,然后通过MAT或者AndroidStudio自带的工具找到还未释放的Bitmap对象,并进一步分析是否发生泄漏。如果判断发生了泄漏,修复的方式也和Java对象一样,通过分析引用链,找到持有该Bitmap对象的GC Root,并及时地进行置空即可。 4wGavsFvh3P8/WV/Hqngq/fcZ4blbFk7UKyuFBGivd6jhfnYYV4cd3vYd5XpjXz6

点击中间区域
呼出菜单
上一章
目录
下一章
×