读书笔记------android图片加载
来源:互联网 发布:金十数据知乎 编辑:程序博客网 时间:2024/05/21 15:39
原博客地址:http://blog.csdn.net/lmj623565791/article/details/41874561
问题汇总
我相信利用LruCache统一管理你的图片是个不二的选择,所有的图片从LruCache里面取,保证所有的图片的内存不会超过预设的空间。
- LurCache是个什么鬼:
内存缓存技术对那些大量占用应用程序宝贵内存的图片提供了快速访问的方法。其中最核心的类是LruCache (此类在android-support-v4的包中提供) 。这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。
在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (SoftReference or WeakReference)。但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应用程序的内存溢出并崩溃。
为了能够选择一个合适的缓存大小给LruCache, 有以下多个因素应该放入考虑范围内,例如:
你的设备可以为每个应用程序分配多大的内存?
设备屏幕上一次最多能显示多少张图片?有多少图片需要进行预加载,因为有可能很快也会显示在屏幕上?
你的设备的屏幕大小和分辨率分别是多少?一个超高分辨率的设备(例如 Galaxy Nexus) 比起一个较低分辨率的设备(例如 Nexus S),在持有相同数量图片的时候,需要更大的缓存空间。
图片的尺寸和大小,还有每张图片会占据多少内存空间。
图片被访问的频率有多高?会不会有一些图片的访问频率比其它图片要高?如果有的话,你也许应该让一些图片常驻在内存当中,或者使用多个LruCache 对象来区分不同组的图片。
你能维持好数量和质量之间的平衡吗?有些时候,存储多个低像素的图片,而在后台去开线程加载高像素的图片会更加的有效。
并没有一个指定的缓存大小可以满足所有的应用程序,这是由你决定的。你应该去分析程序内存的使用情况,然后制定出一个合适的解决方案。一个太小的缓存空间,有可能造成图片频繁地被释放和重新加载,这并没有好处。而一个太大的缓存空间,则有可能还是会引起 java.lang.OutOfMemory 的异常。
所以我们需要引入加载策略,我们不能FIFO,我们选择LIFO,当前呈现给用户的,最新加载;当前未呈现的,选择加载。
- FIFO,LIFO又是什么鬼:
FIFO(First Input First Output)的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。so,Last In First Out 后进先出法。
0 0
- 读书笔记------android图片加载
- Android 图片异步加载 加载网络图片
- android加载网络图片,圆形图片加载
- android加载本地图片
- Android图片加载机制
- android 加载图片方式
- android异步加载图片
- android 异步加载图片
- android中加载图片
- android异步加载图片
- android异步加载图片
- android 图片加载进度条
- android加载网络图片
- android 加载图片方式
- Android 异步加载图片
- android 图片加载 方法
- Android 异步加载图片
- Android图片异步加载
- linux自动重启tomcat脚本
- iOS开发-网络基础解析总结
- Java中堆内存和栈内存_在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)。修改栈指针就可以把栈中的内容销毁.这样最快
- axis2 gennrate java code
- 正则表达式在iOS中的运用
- 读书笔记------android图片加载
- 使用WindowManager添加View——悬浮窗口的基本原理
- struts2标签radio和select中listKey与listValue
- 页面多个textField,键盘遮挡输入框的处理
- 【Spring3】(2)常用注入
- sql语句基础-提升
- SSL建立连接3
- duboo学习使用笔记
- sklearn 常用api(一)