首页 > 编程知识 正文

flutter渲染原理,tinker原理

时间:2023-05-06 00:07:13 阅读:135006 作者:4118

概要

LRU(leastrecentlyused )是指最近最少使用的算法,以优先丢弃最近最少使用的缓存对象为主。

在我们的日常开发中,UI界面加载web图像是很普通的事情,但是如果界面上的图像太多,就不能每次都从web上获取图像,效率低下,同时用户的流量也非常消耗。

Android提供了LruCache类,可以使用它来缓存图像的内存。 今天一起学习吧。

使用LruCache加载图像

编写MyImageLoader类,实现图像缓存功能。

对代码的具体含义进行了注释解释。

在Activity中缓存和加载图像

其中的布局文件很简单,一个按钮和一个Imageview

代码还包含一些工具类,主要用于将图像的url转换为md5编码字符串,并将其保存为缓存文件中的key,以确保其唯一性

3 .实际使用

多次单击图像导入按钮,在log中检查是否正常缓存

可以看到,第一个图像不仅是从互联网下载的,而且是随后从缓存中获取的。

LruCache原理分析

LruCache文档说明

acachethatholdsstrongreferencestoalimitednumberofvalues.eachtimeavalueisaccessed,itismovedtotheheadofaqueue.whenavalueise thevalueattheendofthatqueueisevictedandmaybecomeeligibleforgarbagage

每次访问一个值时,包含有限数量的强引用的缓存都会移动到队列的开头,如果向已满的缓存队列添加新值,则队列中的最后一个值可能会被丢弃,并由垃圾回收机制回收。

LruCache构造函数

已创建链接散列图。 这三个参数分别为初始容量、加载因子和访问顺序,如果accessOrder为true,则此集合的元素顺序为访问顺序。 也就是说,在访问之后,此元素将被放在集合的最后。

有些人可能会怀疑,如果初始容量变为0,那不是就无法存储了吗? 那么,创建这个链接hashmap有什么意义呢?

其实解决这个问题并不难。 看看源代码就知道了

其实第一个参数是你设定的初始大小; 程序内部的实际初始大小为1。如果设定的“初始大小”(initialCapacity )小于1,则map大小将默认为1。 否则,继续向左移动(2),直到capacity大于您设置的initialCapacity;

LruCache的推送方法

的trimToSize ) )方法确定添加元素后是否超过了最大缓存数,如果超过,则清除最小的元素。

LruCache的get方法

LruCahche的get ()方法源

链接hashmap的get ) )方法源

afterNodeAccess ()方法源

LruCache的remove方法

从缓存中删除内容并更新缓存大小

总结

当缓存填满时,LruCache是最近使用的元素,内部使用LinkedHashMap存储的总缓存大小通常为可用内存的1/8。 使用get ()访问元素时,该元素会移动到链接hashmap的末尾

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。