如何在 Android 8.0 以下高效地复用图片?

摘要

我们都知道日常开发的Android App是运行在Java虚拟机的环境中,Java虚拟机会自动进行垃圾回收(garbage collection,以下简称gc),但gc发生时有可能会造成一定程度的卡顿,而Java大内存对象的创建更易引发gc,对应到Android中即Bitmap对象,所以需要尽可能的减少新Bitmap的创建。

在Android 8.0及以上版本,Bitmap的数据是存储在native内存,创建Bitmap不会影响gc。而Android 3.0-7.1版本上,Bitmap的像素数据(byte[])是存储在java堆中的,一张500*500 ARGB8888格式的图片,其内存占用约为1m,如果频繁地创建和销毁Bitmap很容易引起gc,造成页面卡顿。

Android有提供inBitmap机制,来复用不再使用的Bitmap,但是,如何方便地收集不再使用的Bitmap,如何高效的存储管理收集的Bitmap,Android并没有提供系统的解决方案。

基于这些问题,本文提供一套高效的图片复用方案,此方案只需配置较低的内存缓存,即可达到很高的图片复用率,从而有效减少图片相关的gc。

欢迎在评论区写下你对这篇文章的看法。

评论

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-23 11:10
浙ICP备14020137号-1 $Map of visitor$