Android内存优化之bitmap

一.简介

内存优化是android开发中重要的一环,内存优化就是在实现功能的前提下,尽可能少的消耗资源。反之就会出现内存泄露(OOM),而其中bitmap的优化为最重要的一环。

OOM

内存泄露可以引发很多的问题:
1.程序卡顿,响应速度慢
2.莫名消失(当你的程序所占内存越大,它在后台的时候就越可能被干掉。反之内存占用越小,在后台存在的时间就越长)
3.直接崩溃(OutOfMemoryError)

优化bitmap有两个方向,外部优化和内部优化
外部优化是通过调整图片的尺寸,像素等一些外部因素使图片变的尽可能的小。
内部优化是通过代码对图片进行压缩、优化、回收等。

1.使用图片压缩工具压缩图片

网上有许多好用的压缩工具,比如TinyPNG、 图好快、 智图,这些工具都能使我们的图片变的很小但却几乎不影响图片质量,下面有个图片压缩前后的对比。

Android内存优化之bitmap_第1张图片
TinyPNG.png
原图.png
Android内存优化之bitmap_第2张图片
压缩后.png

我们可以看到,图片缩小了73%,而质量却几乎没有改变,这种方法可以解决绝大多数的图片过大问题。

2.使用.9图代替大图

.9图可以使一张很小的图片按照你想要的方式拉升放大,常用于对话框气泡、。关于.9图的使用这里有一篇文章。
Android .9.png图片的制作与使用

3.能自己绘制的图片自己绘制

绘制是android很重要的一环,简单的图片如按钮背景、圆点圆环,我们可以通过shape来绘制,复杂的我们可以使用自定义view来绘制。
android shape的使用
自定义View的详解

4.把图片放到对应的分辨率下

一张原图片被缩小了之后显示其实并没有什么副作用,但是一张原图片被放大了之后显示就意味着要占用更多的内存了。因为图片被放大了,像素点也就变多了,而每个像素点都是要占用内存的。
通过这个例子同时也验证了一个问题,我相信有不少比较有经验的Android程序员可能都遇到过这个情况,就是当你的项目变得越来越大,有的时候加载一张drawable-hdpi下的图片,程序就直接OOM崩掉了,但如果将这张图放到drawable-xhdpi或drawable-xxhdpi下就不会崩掉,其实就是这个道理。

那么经过上面一系列的分析,答案自然也就出来了,图片资源应该尽量放在高密度文件夹下,这样可以节省图片的内存开支,而UI在设计图片的时候也应该尽量面向高密度屏幕的设备来进行设计。就目前来讲,最佳放置图片资源的文件夹就是drawable-xxhdpi。那么有的朋友可能会问了,不是还有更高密度的drawable-xxxhdpi吗?干吗不放在这里?这是因为,市面上480dpi到640dpi的设备实在是太少了,如果针对这种级别的屏幕密度来设计图片,图片在不缩放的情况下本身就已经很大了,基本也起不到节省内存开支的作用了。

你可能感兴趣的:(Android内存优化之bitmap)