Volley学习记录(二)
来源:互联网 发布:js隐藏标签 编辑:程序博客网 时间:2024/05/22 07:55
NetWorkImageView的使用
布局文件:
<com.android.volley.toolbox.NetworkImageView android:id="@+id/niv" android:layout_width="wrap_content" android:layout_height="wrap_content" />
java代码:
private NetworkImageView mNiv;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mNiv = (NetworkImageView) findViewById(R.id.niv); initNetWorkImageView();}private void initNetWorkImageView() { mNiv.setDefaultImageResId(R.drawable.ic_launcher);// 默认图片 mNiv.setErrorImageResId(R.drawable.itheima_logo);// 出错时候显示的图片 String url = "http://192.168.1.100:8080/img/xxx.jpg"; RequestQueue queue = Volley.newRequestQueue(this); ImageCache imageCache = new MyImageCache();//自定义缓存 ImageLoader imageLoader = new ImageLoader(queue, imageCache); // new ImageLoader(请求队列, 自定义缓存); mNiv.setImageUrl(url, imageLoader);}
MyImageCache.java
/*
*基于lru算法的.自己定义的一个内存缓存
* /
public class MyImageCache implements ImageCache {LruCache<String, Bitmap> mLruCache;// 存储结构/容器/集合缓存的最大值// 1.告知缓存的具体大小private int maxSize = 5 * 1024 * 1024; // 5242880 byte//构造函数public MyImageCache() { mLruCache = new LruCache<String, Bitmap>(maxSize) { // 2.覆写sizeOf方法 //该方法是 返回每一个entry对应的大小 // 具体大小需要和我们定义的maxsize单位统一 @Override protected int sizeOf(String key, Bitmap value) { return value.getByteCount(); } };}@Overridepublic Bitmap getBitmap(String url) {// 取图片 return mLruCache.get(url);}@Overridepublic void putBitmap(String url, Bitmap bitmap) {// 存图片 mLruCache.put(url, bitmap); }}
关于内存缓存:
1.内存缓存的核心:
- 存:就有很多的考虑
- 取:只需要知道唯一的key就可以了
2.选择什么样的
存储结构/容器/集合
? Map3.4种引用级别什么意思?
- 强引用:我们平时使用的集合(arraylist,hashmap,hashset),即使内存oom,也不会去回收对象;
- 软应用:使用SoftRefrence去包装一个对象,内存不足的时候去回收对象,尽量保证不oom
- 弱应用:基本没有用过
- 虚引用:形同虚设,同样没有用过
4.
删除策略/算法
,我们定义的存储结构
,不能继续缓存图片的时候.需要进行清理- LRU:最近最少使用,Least Recently Used,其实就是按照访问顺序排序
- 删除使用次数最少的:
- 删除占用体积最大:
5 . 在很久之前(2,3年)前做图片的缓存基本都是使用软应用,但是在2.3之后.google文档明确指出了软应用做缓存的一些不足.建议我们使用LruCache.class;
- 6.举例说明
删除策略
的使用场景- LRU:电影海报图删除策略–>和时间有关系(时效性)
- 删除使用次数最少的:–>和时间没有关系而且大小差不多
- 删除占用体积最大:空间比较宝贵的情况
LruCache的使用:
一个工具方法,提供了基于
Lru缓存策略
的强引用
的内存缓存,存储结构使用的LinkedHashmap
LinkedHashmap使用
- LinkedHashmap和Hashmap区别:在构造方法里面多了3个参数
- 3个参数的意义:
- initialCapacity:初始化容器大小 16
- loadFactor:负载因子
- accessOrder:
- true:LinkedHash内部会排序–>按照访问顺序排序–>这个也是为什么LruCache使用LinkedHashmap做存储结构的原因
- false:按照插入顺序去排序
LruCache在什么地方可以找到?
- 在高版本的sdk里面有.
- 在v4包中有提供.
- LruCache的使用(具体上方代码)
- 告知缓存的具体大小
- 覆写sizeOf方法,具体大小需要和我们定义的maxsize单位统一
0 0
- Volley学习记录(二)
- Volley学习记录(一)
- Volley学习记录(三)
- Volley学习记录(四)
- Volley学习笔记(二):使用Volley加载网络图片
- Volley学习笔记二
- Android学习记录20171023--Volley网络框架(一)
- 初识Volley(二)
- Volley(二)
- 安卓网络通信框架Volley学习(二)基于Volley高效加载网络图片
- Volley框架学习(二)使用Volley实现异步加载图片
- 网络通信框架Volley的学习(二)
- Android——Volley学习笔记(二)
- Volley网络通信框架学习笔记(二)
- Android学习之网络请求(volley)二
- Android学习记录之Volley框架JSONObjectRequest
- AcegiSecurity学习记录(二)
- DB2学习记录(二)
- 网卡信息
- HDU2211 杀人游戏(数学)
- 解决ADB端口占用问题
- android:Activity数据传递之全局对象(application)
- POJ 2631 Roads in the North(树的直径)
- Volley学习记录(二)
- 汇编软件MASM和调试工具DEBUG的使用
- 关于Windows7 64的注册表读写问题
- uvaoj-1225:数数字
- spring(AOP)多个切面
- Leetcode之first missing positive
- XML VS SQLite
- POJ 1985 Cow Marathon(树的直径)
- JUnit Test WebService