网络获取图片的优化
来源:互联网 发布:淘宝店铺地址怎么填写 编辑:程序博客网 时间:2024/05/20 09:24
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(); } }}
//Activity的代码
//全部全局
ImagesUtils imagUtils;String urlBitmap = "http://img.my.csdn.net/uploads/201407/26/1406383264_4787.jpg";private ImageView iv;private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 0) { Bitmap bitmap = (Bitmap) msg.obj; // 设置给imageView String tag = msg.getData().getString("tag"); // 根据标记取出imageView iv为你要赋值的控件 ImageView imageView = (ImageView) iv.findViewWithTag(tag); if (imageView != null && bitmap != null) { // 从网络获取图片 imageView.setImageBitmap(bitmap); Log.i("tag", "从网络中获取图片"); } } }};
//oncreateview里面的代码
iv = (ImageView) findViewById(R.id.iv);//实例化对象ImagesUtils in=new ImagesUtils(this,handler);//调用方法 urlBitmap为URI链接Bitmap bitMap = in.getBitMap(urlBitmap);//给控件赋值iv.setImageBitmap(bitMap);
阅读全文
0 0
- 网络获取图片的优化
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- 获取网络图片的代码
- 获取网络图片的大小
- 获取网络图片的尺寸
- 获取网络图片的大小
- 获取网络图片的ImageSpan
- ListView优化,获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ListView加载网络图片的优化
- 详解ListView加载网络图片的优化
- android获取网络上的图片
- Android获取网络图片的方法
- android获取网络图片的用法
- android获取网络图片的用法
- Android 获取网络上的图片
- IOS获取网络图片的方法
- 【BZOJ2748】音量调节(动态规划)
- DDPG之OU过程
- oracle:时间间隔
- 算法题—n位正整数去掉k(k<=n)位数字得到最小数
- c语言小练
- 网络获取图片的优化
- saltstack部署openstack
- C语言中的符号重载
- 算法导论(七)——跳跃表&自组织表,竞争性分析
- opencv2.49+vs 2012配置(编译器x64,系统win7 64位)
- HDFS读写过程
- TQ210裸机编程——led
- 蓝牙的运用
- spring集成--数据库连接池配置方法