使用LruCache的代码整理

来源:互联网 发布:excel数据标签 编辑:程序博客网 时间:2024/06/11 23:52

整理这篇博客的后面部分的代码,凑手重新梳理一下AsyncTask的流程大笑



/** * 所有的图片处理 *  * @author Administrator *  */public class PicAllActivity extends Activity {private ImageView pic_image, pic_image2;private LruCache mMemoryCache = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.picall);init();// 获取到可用内存的最大值,使用内存超出这个值会引起OutOfMemory异常。// LruCache通过构造函数传入缓存值,以KB为单位。int maxMemory2 = (int) (Runtime.getRuntime().maxMemory() / 1024);// 使用最大可用内存值的1/8作为缓存的大小。int cacheSize = maxMemory2 / 8;mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {@Overrideprotected int sizeOf(String key, Bitmap bitmap) {// 重写此方法来衡量每张图片的大小,默认返回图片数量。return bitmap.getRowBytes() * bitmap.getHeight() / 1024;}};loadBitmap(R.drawable.pic12, pic_image2);}private void init() {pic_image2 = (ImageView) findViewById(R.id.pic_image2);}public void addBitmapToMemoryCache(String key, Bitmap bitmap) {if (getBitmapFromMemCache(key) == null) {mMemoryCache.put(key, bitmap);}}public Bitmap getBitmapFromMemCache(String key) {return (Bitmap) mMemoryCache.get(key);}public void loadBitmap(int resId, ImageView imageView) {final String imageKey = String.valueOf(resId);final Bitmap bitmap = getBitmapFromMemCache(imageKey);if (bitmap != null) {imageView.setImageBitmap(bitmap);} else {imageView.setImageResource(R.drawable.left_touxiang);BitmapWorkerTask task = new BitmapWorkerTask(imageView);task.execute(resId);}}class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {private ImageView mImageView;public BitmapWorkerTask(ImageView imageView) {mImageView = imageView;}/** * 第一 *  * 这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。 */@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();}/** * 第二 *  * 在后台加载图片。 */@Overrideprotected Bitmap doInBackground(Integer... params) {final Bitmap bitmap = ImageTools2.decodeSampledBitmapFromResource(getResources(), params[0], 100, 100);addBitmapToMemoryCache(String.valueOf(params[0]), bitmap);// publishProgress(values);//更新进度return bitmap;}/** * 第三 *  *  * 可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。 */@Overrideprotected void onProgressUpdate(Void... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);}/** * 第四 *  *  * 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 * 此方法在主线程执行,任务执行的结果作为此方法的参数返回 */@Overrideprotected void onPostExecute(Bitmap result) {// TODO Auto-generated method stubmImageView.setImageBitmap(result);super.onPostExecute(result);}/** *  *  * 用户调用取消时,要做的操作 */@Overrideprotected void onCancelled() {// TODO Auto-generated method stubsuper.onCancelled();}}}

XML文件就是一个简单的ImageView控件。







0 0
原创粉丝点击