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.选择什么样的存储结构/容器/集合? Map

  • 3.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的使用(具体上方代码)
    1. 告知缓存的具体大小
    2. 覆写sizeOf方法,具体大小需要和我们定义的maxsize单位统一
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 香港购物超5000被海关扣怎么办 浅色衣服被深色衣服染色了怎么办 金立手机微信不能发语音怎么办 吃鸡买的账号密码邮箱忘记了怎么办 氩弧焊枪管带里进水了怎么办 绝地求生穿头盔的时候连衣帽怎么办 开车不小心把光缆线给挂断了怎么办 脚刺到了生锈钢钉没打针怎么办 一加3t背壳螺丝掉了怎么办 30万美金美金中国被扣怎么办 电脑使用迅雷变的很卡怎么办 优盘拷贝过程中失去优盘路径怎么办 用百度云上传视频文件太慢了怎么办 网易云音乐云盘电脑上传很慢怎么办 路由器的宽带账号密码忘记了怎么办 蚂蚁邦路由器管理密码忘记了怎么办 红米2a刷机失败怎么办 小米手机开机图案锁忘记了怎么办 小米6进水无限闪屏开机重启怎么办 红米手机一直卡在开机画面怎么办 红米4卡在开机画面怎么办 红米手机一直在开机画面怎么办 红米手机一直跳开机画面怎么办 红米note3锁屏密码忘记怎么办 红米手机忘记锁屏密码怎么办 红米4锁屏密码忘了怎么办 红米note忘记锁屏密码怎么办 红米note2锁屏密码忘了怎么办 机打发票抬头名字少写一个字怎么办 卷式发票名字写错了怎么办 发票丢失了销售方不给补手续怎么办 总是把单词归不成句孑怎么办 白色踏板摩托车把漆刮了怎么办 苹果手机用流量缓冲很难怎么办 谷歌浏览器安卓手机版打不开怎么办 怀孕四个月检查高型半氨酸高怎么办 猎豹cs9怎么打不开车门怎么办 孩子在学校被老师冤枉打板子怎么办 么司福利体检暗地查乙肝怎么办 上体育课时被老师罚了腿疼怎么办 义务兵学技术不好班长打他怎么办