Universal-Image-loader 部分源码讲解 及 如何 配合阿里云 实现图片缓存。
Posted 摘星猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Universal-Image-loader 部分源码讲解 及 如何 配合阿里云 实现图片缓存。相关的知识,希望对你有一定的参考价值。
Universal-Image-loader 部分源码讲解 及 如何 配合阿里云 实现图片缓存
- ImagerLoader 相关使用及使用 我就不再啰嗦了 ,有需求的同学请直接飞过去http://blog.csdn.net/xiaanming/article/details/26810303
- 开始讲下阿里云图片 服务器使用及其 android 端的 oss-android-sdk-1.0.0.jar 以下贴出android 端管理类。
public class OSSManager
private static OSSManager instance;
private static OSSService ossService;
public static OSSManager getInstance()
if (instance == null)
instance = new OSSManager();
return instance;
public static OSSService getOssService()
return ossService;
private static String TAG = OSSManager.class.getSimpleName();
public void Init(final Context context)
if (ossService == null)
ossService = OSSServiceProvider.getService();
ossService.setGlobalDefaultTokenGenerator(new TokenGenerator()
@Override
public String generateToken(String httpMethod, String md5,
String type, String date, String ossHeaders, String resource)
//demo的顺序 不要动它
String content = httpMethod + "\\n" + md5 + "\\n" + type + "\\n"
+ date + "\\n" + ossHeaders + resource;
//以下代码是请求 密钥的 方法 必须实现(你换成你自己的http 请求 就好了),其他代码 直接照搬 demo就好了
// ClientServer server = new ClientServer(InterfaceMethod.get36(content));
// ResultBean resultBean = server.execute(context);
// if (resultBean != null&&resultBean.getErr()==0)
// @SuppressWarnings("unchecked")
// Map<String,String> map = (Map<String, String>) resultBean.getResultParam(Map.class)
// .get(0);
// //map.get("data") 为服务器加密后的key 直接返回就好了
// return map.get("data");
// else
return "";
//
);
ossService.setGlobalDefaultHostId("oss-cn-hangzhou.aliyuncs.com");
ossService.setCustomStandardTimeWithEpochSec(System.currentTimeMillis() / 1000);
ossService.setGlobalDefaultACL(AccessControlList.PRIVATE);
// 默认为private
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectTimeout(15 * 1000); // 设置全局网络连接超时时间,默认30s
conf.setSocketTimeout(15 * 1000); // 设置全局socket超时时间,默认30s
conf.setMaxConnections(50); // 设置全局最大并发网络链接数, 默认50
ossService.setClientConfiguration(conf);
3.文件 上传
public static OSSData postImageOSSdata(byte[] dataToUpload, String path)
LogUtil.i("服务器地址", path);
OSSData data = getOssService().getOssData(getUploadBucket(), path);
data.setData(dataToUpload, "image/jpeg");
//上传监听
data.uploadInBackground(new SaveCallback()
@Override
public void onSuccess(String objectKey)
Log.d(TAG, "[onSuccess] - " + objectKey
+ " upload success!");
@Override
public void onProgress(String objectKey, int byteCount,
int totalSize)
Log.d(TAG, "[onProgress] - current upload " + objectKey
+ " bytes: " + byteCount + " in total: "
+ totalSize);
@Override
public void onFailure(String objectKey,
OSSException ossException)
);
return data;
//文件储存服务器
private static OSSBucket getUploadBucket()
OSSBucket bucket = getOssService().getOssBucket("你们租用服务器的名字");
return bucket;
4.获取图片
public static byte[] getImage(String path)
byte[] bData = null;
OSSData data = getOssService().getOssData(getBucket(), path);
try
bData = data.get();
Log.d(TAG, "finish getting data! length: " + bData.length);
catch (OSSException e)
HandleException.handleException(e);
return bData;
//图片处理 服务器 OSSBucket
private static OSSBucket getBucket()
//这里 使用已经绑定域名的 图片服务器 应为OSS 规定只有绑定图片服务器域名了才可以 使用图片服务器功能(比如图片压缩)
OSSBucket bucket = getOssService().getOssBucket("你们绑定的 图片服务器域名");
bucket.setBucketHostId("你们绑定的 图片服务器域名");
return bucket;
- 上面已经把Oss 用到的设置及 主要的2个方法 已经 写出来了,现在我们来配合一下 Universal-Image-Loader。
File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.diskCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)
.taskExecutor(...)
.taskExecutorForCachedImages(...)
.threadPoolSize(3) // default
.threadPriority(Thread.NORM_PRIORITY - 1) // default
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiscCache(cacheDir)) // default
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileCount(100)
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
//这句是关键点 把这个配置到你的代码里。
.imageDownloader(new AliLoader(context))
.imageDecoder(new BaseImageDecoder()) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs()
.build();
6.自定义 AliLoader 类。
public class AliLoader extends BaseImageDownloader
private static boolean isgetToken = false;
// private String uri;
public AliLoader(Context context)
super(context);
// TODO Auto-generated constructor stub
@Override
protected InputStream getStreamFromOtherSource(String imageUri, Object extra)
throws IOException
// TODO Auto-generated method stub
byte[] b = OSSManager.getImage(imageUri);
if (b != null)
return new ByteArrayInputStream(b);
else
return super.getStreamFromOtherSource(imageUri, extra);
7.大家有疑问可以 留言 我每天都会登陆 当天解答问题,谢谢支持。
以上是关于Universal-Image-loader 部分源码讲解 及 如何 配合阿里云 实现图片缓存。的主要内容,如果未能解决你的问题,请参考以下文章
深入解析开源项目之Universal-Image-Loader缓存篇
Android 图片加载框架Universal-Image-Loader源码解析
Android 开源框架Universal-Image-Loader完全解析--- 图片缓存策略详解
Universal-Image-Loader(android图片缓存)