三次缓存,imgloder配置,二次采样
来源:互联网 发布:股票入门知识软件 编辑:程序博客网 时间:2024/06/03 13:53
package com.kson.viewpagerautobanner.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v4.app.INotificationSideChannel;
import android.widget.ImageView;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
/**
* Author:kson
* E-mail:19655910@qq.com
* Time:2017/08/16
* Description:封装bitmap三级缓存工具类
*/
public class NetworkUtils {
//文件夹目录
private final String SDCARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/kson/";
private String url;
private ImageView iv;
//弱引用集合,弱引用(jvm垃圾回收的时候,只有内存不足时才回收)
private HashMap<String,SoftReference<Bitmap>> hashMap = new HashMap<>();
public NetworkUtils(String url, ImageView iv) {
this.url = url;
this.iv = iv;
}
/**
* 网络请求
*/
public void execute(){
new BitmapTask().execute(url);
}
/**
* 网络请求异步任务类
*/
class BitmapTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (200 == connection.getResponseCode()) {
InputStream inputStream = connection.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream);
options.inSampleSize = 4;
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
iv.setImageBitmap(bitmap);
memory(url,bitmap);
diskMemory(url,bitmap);
}
}
/**
* 把bitmap存到sdcard中,本地存储
*
* @param url
* @param bitmap
*/
public void diskMemory(String url, Bitmap bitmap) {
try {
File dir = new File(SDCARD_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(url));
OutputStream outputStream = new FileOutputStream(file);
//把bitmap'写入到sdcard
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取磁盘的bitmap
* @param url
* @return
*/
public Bitmap getDiskMemory(String url) {
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(url));
if (file != null && file.exists()) {
try {
InputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 内存缓存
* @param url
* @param bitmap
*/
public void memory(String url,Bitmap bitmap){
//得到软引用对象
SoftReference<Bitmap> bmp = new SoftReference<Bitmap>(bitmap);
//存储软引用对象
hashMap.put(new Md5FileNameGenerator().generate(url),bmp);
}
/**
* 从内存缓存取出bitmap
* @param url
* @return
*/
public Bitmap getMemory(String url){
Bitmap bitmap = null;
//得到软引用对象
SoftReference<Bitmap> bmpReference = hashMap.get(new Md5FileNameGenerator().generate(url));
if (bmpReference!=null){
bitmap = bmpReference.get();
}
return bitmap;
}
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v4.app.INotificationSideChannel;
import android.widget.ImageView;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
/**
* Author:kson
* E-mail:19655910@qq.com
* Time:2017/08/16
* Description:封装bitmap三级缓存工具类
*/
public class NetworkUtils {
//文件夹目录
private final String SDCARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/kson/";
private String url;
private ImageView iv;
//弱引用集合,弱引用(jvm垃圾回收的时候,只有内存不足时才回收)
private HashMap<String,SoftReference<Bitmap>> hashMap = new HashMap<>();
public NetworkUtils(String url, ImageView iv) {
this.url = url;
this.iv = iv;
}
/**
* 网络请求
*/
public void execute(){
new BitmapTask().execute(url);
}
/**
* 网络请求异步任务类
*/
class BitmapTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (200 == connection.getResponseCode()) {
InputStream inputStream = connection.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream);
options.inSampleSize = 4;
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
iv.setImageBitmap(bitmap);
memory(url,bitmap);
diskMemory(url,bitmap);
}
}
/**
* 把bitmap存到sdcard中,本地存储
*
* @param url
* @param bitmap
*/
public void diskMemory(String url, Bitmap bitmap) {
try {
File dir = new File(SDCARD_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(url));
OutputStream outputStream = new FileOutputStream(file);
//把bitmap'写入到sdcard
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取磁盘的bitmap
* @param url
* @return
*/
public Bitmap getDiskMemory(String url) {
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(url));
if (file != null && file.exists()) {
try {
InputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 内存缓存
* @param url
* @param bitmap
*/
public void memory(String url,Bitmap bitmap){
//得到软引用对象
SoftReference<Bitmap> bmp = new SoftReference<Bitmap>(bitmap);
//存储软引用对象
hashMap.put(new Md5FileNameGenerator().generate(url),bmp);
}
/**
* 从内存缓存取出bitmap
* @param url
* @return
*/
public Bitmap getMemory(String url){
Bitmap bitmap = null;
//得到软引用对象
SoftReference<Bitmap> bmpReference = hashMap.get(new Md5FileNameGenerator().generate(url));
if (bmpReference!=null){
bitmap = bmpReference.get();
}
return bitmap;
}
}
二次采样
实现步骤:
第一步:BitmapFactory.Option
设置 inJustDecodeBounds为true
第二步:BitmapFactory.decodeFile(path,option)方法(或者decodeStream())
解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。
获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度)
第三步:计算缩放比例,也可以不计算,直接给它设定一个值。
options.inSampleSize = “你的缩放倍数”;//必须为2的幂
如果是2就是高度和宽度都是原始的一半。
第四步:设置options.inJustDecodeBounds =false;imgloder
阅读全文
0 0
- 三次缓存,imgloder配置,二次采样
- 三级缓存,二次采样
- 三级缓存,二次采样
- Bitmap 二次采样三级缓存
- Listview:性能优化,三级缓存,二次采样
- 图片的二次采样三级缓存策略
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- 二次采样
- JQuery 选择器
- Nginx负载均衡配置
- cookie理解
- 数据结构与算法笔记之--时间复杂度和空间复杂度
- 前端初学学习进程VI
- 三次缓存,imgloder配置,二次采样
- 剑指offer:数字在排序数组中出现的次数
- moveToFirst和moveToNext的区别
- CentOS 7.0下使用yum安装MySQL
- Kafka简介、基本原理、执行流程与使用场景
- selenium2java两个小爬虫示例
- 根据日期算星期(基姆拉尔森公式)
- KMP 算法
- expdp impdp导入导出指定数据库表