bitmap是一项重要技术,而优化一直都是大家关注的问题。bitmap显示优化有哪些呢,内存优化,内存管理?相信你一定有想说的。那么让我们一起来看看有什么方法优化吧。
首先看一张官方的说法 大概意思是这样:Bitmap在Android2.3.3及一下的版本,背景像素数据是存储在本地内存中的,它是从Bitamp本身分离出来,并且存储在Dalvik heap里。在可预测的方式中像素数据在本地内存是不释放的,可能引起一个应用简单超出它的限制内存和崩溃。当在Android3.0及以后,像素数据被存放在Dalvik heap并和bitmap关联的。也就是将Bitmap的内存完全放心的交给虚拟机管理了,我们只需要保证Bitmap对象遵守虚拟机的GC Root Tracing的回收规则即可。
那么下面就来看看优化方式有哪些:
1.计数器法优化
根据Bitmap的显示缓存个数来判断是否回收内存,如果个数为0,并且bitmap不为空就直接使用recycle方法回收。
2.使用缓存
我们肯定做过这样的缓存,第一次从网络获取图片之后,下次肯定希望能在本地缓存中拿到图片,而不是再从网络获取。这我们自然就会想到使用缓存就方便多了,可以使用 LruCash缓存,LruCash作为Bitamp的存放容器。或者也存放在SD卡中,这就用到DiskLruCash,这两个结合在一起使用,会大大减少内存的开销。
3.SoftReference和inBitmap参数的结合
在第二点中提及到,可以采用LruCache作为存放Bitmap的容器,而在LruCache中有一个方法值得留意,那就是entryRemoved,按照文档给出的说法,在LruCache容器满了需要淘汰存放其中的对象腾出空间的时候会调用此方法。在此方法中将Bitmap使用SoftReference包裹起来,并用事先准备好的一个HashSet容器来存放这些即将被回收的Bitmap。
4.降低采样率,inSampleSize的计算
关于降低采样率对inSampleSize的计算方法:一、inSampleSize小于1时按1来处理 二、它是以2的次幂来增加的压缩。以下是看到的一个好的算法。
5.采用decodeFileDescriptor来编码图片
关于decodeFileDescriptor来编码图片可以优化内存,按文档的说法是因为根据descriptor的位置是不会改变的,也就是这个descriptor是可重复使用的,而不用每次都去找这个描述符,从而提高效率。
以上,就是Bitmap的显示优化的一些内容,写得不对的地方,请大家指教。