图片三级优化
来源:互联网 发布:四通一达哪个最快知乎 编辑:程序博客网 时间:2024/06/10 16:09
温馨提示 不要瞎改类名 否则后果自负
#权限必须配置千万别忘啦
//第一个类MD5工具类
public class EncoderUtils { public static String encode(String string) throws Exception { byte[] hash = MessageDigest.getInstance("MD5").digest( string.getBytes("UTF-8")); StringBuilder hex = new StringBuilder(hash.length * 2); for (byte b : hash) { if ((b & 0xFF) < 0x10) { hex.append("0"); } hex.append(Integer.toHexString(b & 0xFF)); } return hex.toString(); }}
//第二个类
图片缓存工具类
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.LruCache;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by Administrator on 2017/11/6. */public class ImagesUtils { Handler handler; private File cacheDir; private ExecutorService newFixedThreadPool; private LruCache<String, Bitmap> lruCache; /** * @param context * @param handler */ public ImagesUtils(Context context, Handler handler) { //获得你手机上的最大内存 long maxMemory = Runtime.getRuntime().maxMemory(); int maxSize = (int) (maxMemory / 8); this.handler = handler; //得到本app在sd上的缓存文件夹 cacheDir = context.getCacheDir(); // 初始化线程池;初始化5个现成,供程序使用 newFixedThreadPool = Executors.newFixedThreadPool(5); lruCache = new LruCache<String, Bitmap>(maxSize) { //每次缓存图片都要调用这个方法; @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } /** * 取图片, * * @param path * @return */ public Bitmap getBitMap(String path) { Bitmap bitmap = lruCache.get(path); if (bitmap != null) { System.out.println("我走了内存"); return bitmap; } //从本直去取,sd卡去取bitmap bitmap = getBitMapFromLocal(path); if (bitmap != null) { System.out.println("我走了本地缓存"); return bitmap; } // 从网络去取 getBitmapFromNet(path); return null; } /** * 从sd卡获取图片 * * @param path * @return */ private Bitmap getBitMapFromLocal(String path) { try { //自己定义的加密工具类 String encode = EncoderUtils.encode(path); FileInputStream fileInputStream = new FileInputStream(cacheDir + "/" + encode); Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream); //存到内存 lruCache.put(path, bitmap); return bitmap; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 从网络 * * @param path */ private void getBitmapFromNet(final String path) { //用线程池里的线程执行请求网络操作; newFixedThreadPool.execute(new Runnable() { @Override public void run() { try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); int responseCode = connection.getResponseCode(); if (responseCode == 200) { InputStream inputStream = connection.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); Message msg = new Message(); msg.what = 111; msg.obj = bitmap; Bundle data = new Bundle(); data.putString("tag", path); msg.setData(data); handler.sendMessage(msg); //缓存到本地 saveBitmapToLocal(bitmap, path); //缓存到内存 lruCache.put(path, bitmap); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } protected void saveBitmapToLocal(Bitmap bitmap, String path) { try { String encode = EncoderUtils.encode(path); FileOutputStream fileOutputStream = new FileOutputStream(cacheDir + "/" + encode); //图片二次裁剪 bitmap.compress(Bitmap.CompressFormat.JPEG, 80, fileOutputStream); } catch (Exception e) { e.printStackTrace(); } }}
阅读全文
0 0
- 图片三级优化
- 图片三级优化
- ListView 优化 图片三级缓存
- android加载图片优化(三级缓存)
- Android性能优化----图片三级缓存
- ListView优化之图片的三级缓存(LruCache)
- 使用Volley三级缓存机制优化ListView加载图片
- 三级联动代码优化
- gcc的三级优化
- gcc三级优化
- gcc的三级优化
- 编译器的三级优化
- 编译器的三级优化
- 编译器的三级优化
- 三级菜单(2)优化
- 图片加载之三级缓存机制、AsyncTask优化、ComViewHolder极致优化ListView、LruCache搭配Runtime完美内存优化
- 图片的三级缓存
- Android 图片三级缓存
- jQuery formValidator 表单验证
- [喵咪软件推荐(1)]全球国家信息库
- Vue.js目录结构
- MyBatis的传入参数parameterType类型
- sublime text3快捷键
- 图片三级优化
- NLP入门+实战必读:一文教会你最常见的10种自然语言处理技术(附代码)
- SQL Server 2008的BI组件SSAS使用详解
- [喵咪软件推荐(2)]全球服务器测速工具speedtest-cli
- <5> 一些关于链表的练习
- effective C++ 学习(Templates and Generic Programming(泛型编程))
- PHP规范PSR0和PSR4的理解
- SASO 2870 2015 Saudi Arabia energy efficiency EEI label
- [喵咪开源软件推荐(3)]全球IP库-GeoLite2-City