理论教育 Android图片内存优化技巧

Android图片内存优化技巧

时间:2023-06-19 理论教育 版权反馈
【摘要】:decodeStream最大的优点是直接调用JNI>>nativeDecodeAsset()来完成decode,而无需再使用Java层的createBitmap,从而节省了Java层的空间。如果在读取时加上图片的Config参数,可以更有效的减少加载的内存,从而更有效地阻止抛出内存异常。另外,decodeStream()直接用图片来读取字节码,不会根据机器的各种分辨率来自动适应。当使用了decodeStream()后,需要在hdpi和mdpi中配置相应的图片资源,否则在不同分辨率机器上都是同样大小,显示出来的大小就不对了。我们需要优化Dalvik虚拟机的堆内存分配。

Android图片内存优化技巧

在Android应用中,当对图片本身进行操作时,应该尽量不要使用setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图,因为这些方法在完成Decode功能后,最终都是通过Java层的createBitmap()方法来完成的,这需要消耗更多内存。因此,应该先通过BitmapFactory.decodeStream方法创建出一个bitmap,然后再将其设为Image View的source。decodeStream最大的优点是直接调用JNI>>nativeDecodeAsset()来完成decode,而无需再使用Java层的createBitmap,从而节省了Java层的空间。如果在读取时加上图片的Config参数,可以更有效的减少加载的内存,从而更有效地阻止抛出内存异常。另外,decodeStream()直接用图片来读取字节码,不会根据机器的各种分辨率来自动适应。当使用了decodeStream()后,需要在hdpi和mdpi中配置相应的图片资源,否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。

请读者看下面的演示代码:

在上述代码中,option中的值指的是对图片进行的缩放比例,SDK中建议其值是2的指数值,如果值越大,越会导致图片不清晰。(www.daowen.com)

我们需要优化Dalvik虚拟机的堆内存分配。对于Android平台来说,其托管层使用的是Dalvik Java虚拟机,从目前的表现来看还有很多地方可以优化处理,比如在开发一些大型游戏或耗资源的应用中可能会考虑用手动干涉GC处理,使用类dalvik.system.VMRuntime提供的方法setTargetHeapUtilization可以增强程序堆内存的处理效率。使用如下方法即可:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈