虽然遇到过几次因为BITMAP照成OOM,但是之前都没有正视过这个问题,今天去面试果然出现了这个问题,感觉被虐了啊。知耻而后勇,回去查了一些资料,现在总算明白了一点LruCache图片缓存技术,这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除,这种机制非常适合bitmap这种内存坑爹货啊。
下面贴一下示例代码,其实这个代码一点实用意义都没有,只不过把里面的一些函数和调用提了一下。
~~~
package com.example.mytest;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView iv;
private Bitmap bm;
private LruCache<String, Bitmap> mMemoryCache;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory/8;
mMemoryCache = new LruCache<String, Bitmap>((cacheSize)){
@Override
protected int sizeOf(String key, Bitmap value) {
// TODO Auto-generated method stub
return value.getByteCount()/1024;
}
};
iv = (ImageView) findViewById(R.id.iv);
bm = BitmapFactory.decodeResource(getResources(), R.drawable.xiamu);
iv.setImageBitmap(bm);
mMemoryCache.put("key", bm);
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bitmap = null;
// TODO Auto-generated method stub
if (mMemoryCache.get("key") == null) {
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xiamu);
iv.setImageBitmap(bitmap);
}
else {
iv.setImageBitmap(mMemoryCache.get("key"));
}
}
});
}
}
~~~
- 前言
- 安卓ListView一个简单代码的注释和探讨
- 安卓wifi热点编程代码的若干注释
- 安卓距离传感器编程
- 简单的ScrollView
- 简单的ListView
- 简单的ArrayAdapter
- AsyncTask的初步学习
- AsyncTask再度学习
- Handler初步学习
- 开启系统Activity
- 隐式调用Activity
- Activity的生命周期
- startActivityForResult的初步学习
- 多点触控拉伸图片
- LruCache图片缓存技术
- SQLiteOpenHelper数据库操作
- 短信拦截器
- 简单的Notification
- ListView优化以及checkbox状态问题
- 安卓多线程下载
- 安卓JSON解析初步探讨
- 选项卡样式的fragment
- DrawerLayout实现简单的侧滑功能
- 安卓软引用解决图片OOM问题
- 安卓隐式Intent启动Activity和BroadcastReceiver若干注意点
- Dialog学习笔记
- ActionBar使用