这几天在弄图片处理,在我的这篇转载的博客里,有的代码不能用,查明原因,原来是API太低的缘故,由于考虑手机低版本的原因,所以,我都是用的API10(2.3.3),
里面的LruCache,是在API11(3.0)之后才有的,所以想要使用,必须引入v4jar包,那篇博客里面有段代码
- private LruCache<String, Bitmap> mMemoryCache;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // 获取到可用内存的最大值,使用内存超出这个值会引起OutOfMemory异常。
- // LruCache通过构造函数传入缓存值,以KB为单位。
- int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
- // 使用最大可用内存值的1/8作为缓存的大小。
- int cacheSize = maxMemory / 8;
- mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
- @Override
- protected int sizeOf(String key, Bitmap bitmap) {
- // 重写此方法来衡量每张图片的大小,默认返回图片数量。
- return bitmap.getByteCount() / 1024;
- }
- };
- }
- public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
- if (getBitmapFromMemCache(key) == null) {
- mMemoryCache.put(key, bitmap);
- }
- }
- public Bitmap getBitmapFromMemCache(String key) {
- return mMemoryCache.get(key);
- }
可以替换的,可以用bitmap.getRowBytes() * bitmap.getHeight()代替。
bitmap.getRowBytes():Since API Level 1,用于计算位图每一行所占用的内存字节数。
bitmap.getHeight():Since API Level 1,用于计算位图行数。
bitmap.getByteCount():Since API Level 12,用于计算位图所占用的内存字节数。