这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下。

 

内存缓存技术

在我们开发程序中要在界面上加载一张图片是件非常容易的事情,但如果是加载一堆图片呢?比如ListView,GridView这类的控件,随着屏幕滑动,图片加载也会越来越多,应用程序所可以使用的内存毕竟是有限的,如果一味的去加载图片,很容易导致OOM(Out Of Memory)内存溢出,导致程序崩溃。

这里我们一般的做法是将显示在屏幕之外的图片进行内存回收,此时的垃圾回收器会认为应用对这些图片不再持有引用,从而进行GC操作。但现实还需要考虑到问题是,如果用户又滑动屏幕回到之前我们已经回收掉的图片位置,这时候该怎么办?重新去加载一张图片肯定是不可取的,这样既浪费了时间,又浪费了用户的流量。

这里我们就会想到利用内存缓存来解决这个问题,利用内存缓存可以让应用快速的加载和处理图片,从而提高流畅性。

内存缓存技术对那些大量占用应用程序宝贵内存的图片提供了快速访问的方法,其中最核心的类是LruCache (此类在android-support-v4的包中提供) 。这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。

在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (SoftReference or WeakReference)。但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应用程序的内存溢出并崩溃。

对于LruCache类不熟悉的朋友可以看看这篇文章《Android高效加载大图、多图解决方案,有效避免程序OOM》。

 

磁盘缓存技术

对于内存缓存LruCache只是管理了内存中图片的存储与释放,如果图片从内存中被移除的话,那么又需要从网络上重新加载一次图片,这显然非常耗时。对此,Google又提供了一套硬盘缓存的解决方案:DiskLruCache(非Google官方编写,但获得官方认证)。

关于磁盘缓存DisLruCache类不熟悉的朋友可以看看这篇文章的介绍《Android DiskLruCache完全解析,硬盘缓存的最佳方案》  

 

 

 

完美结合LruCache+DiskLruCache

首先先来看下实现效果:

安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)  安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)

 

这是一个很简单的布局,大布局是GridView,小布局ImageView嵌套在大布局里,贴上代码再做分析吧,其实注释也挺全的。

既然要完成磁盘存储,那么必不可少的就是DisLruCache类的,先引进项目里再说,再来就是图片资源集合了。

图片资源类:

 1 package com.example.photoswall;
 2 
 3 
 4 /**
 5  * 图片资源类
 6  * @author Balla_兔子
 7  *
 8  */
 9 public class Images {
10 
11     public final static String[] imageThumbUrls = new String[] {
12         "//img-my.csdn.net/uploads/201407/26/1406383299_1976.jpg",
13         "//img-my.csdn.net/uploads/201407/26/1406383291_6518.jpg",
14         "//img-my.csdn.net/uploads/201407/26/1406383291_8239.jpg",
15         "//img-my.csdn.net/uploads/201407/26/1406383290_9329.jpg",
16         "//img-my.csdn.net/uploads/201407/26/1406383290_1042.jpg",
17         "//img-my.csdn.net/uploads/201407/26/1406383275_3977.jpg",
18         "//img-my.csdn.net/uploads/201407/26/1406383265_8550.jpg",
19         "//img-my.csdn.net/uploads/201407/26/1406383264_3954.jpg",
20         "//img-my.csdn.net/uploads/201407/26/1406383264_4787.jpg",
21         "//img-my.csdn.net/uploads/201407/26/1406383264_8243.jpg",
22         "//img-my.csdn.net/uploads/201407/26/1406383248_3693.jpg",
23         "//img-my.csdn.net/uploads/201407/26/1406383243_5120.jpg",
24         "//img-my.csdn.net/uploads/201407/26/1406383242_3127.jpg",
25         "//img-my.csdn.net/uploads/201407/26/1406383242_9576.jpg",
26         "//img-my.csdn.net/uploads/201407/26/1406383242_1721.jpg",
27         "//img-my.csdn.net/uploads/201407/26/1406383219_5806.jpg",
28         "//img-my.csdn.net/uploads/201407/26/1406383214_7794.jpg",
29         "//img-my.csdn.net/uploads/201407/26/1406383213_4418.jpg",
30         "//img-my.csdn.net/uploads/201407/26/1406383213_3557.jpg",
31         "//img-my.csdn.net/uploads/201407/26/1406383210_8779.jpg",
32         "//img-my.csdn.net/uploads/201407/26/1406383172_4577.jpg",
33         "//img-my.csdn.net/uploads/201407/26/1406383166_3407.jpg",
34         "//img-my.csdn.net/uploads/201407/26/1406383166_2224.jpg",
35         "//img-my.csdn.net/uploads/201407/26/1406383166_7301.jpg",
36         "//img-my.csdn.net/uploads/201407/26/1406383165_7197.jpg",
37         "//img-my.csdn.net/uploads/201407/26/1406383150_8410.jpg",
38         "//img-my.csdn.net/uploads/201407/26/1406383131_3736.jpg",
39         "//img-my.csdn.net/uploads/201407/26/1406383130_5094.jpg",
40         "//img-my.csdn.net/uploads/201407/26/1406383130_7393.jpg",
41         "//img-my.csdn.net/uploads/201407/26/1406383129_8813.jpg",
42         "//img-my.csdn.net/uploads/201407/26/1406383100_3554.jpg",
43         "//img-my.csdn.net/uploads/201407/26/1406383093_7894.jpg",
44         "//img-my.csdn.net/uploads/201407/26/1406383092_2432.jpg",
45         "//img-my.csdn.net/uploads/201407/26/1406383092_3071.jpg",
46         "//img-my.csdn.net/uploads/201407/26/1406383091_3119.jpg",
47         "//img-my.csdn.net/uploads/201407/26/1406383059_6589.jpg",
48         "//img-my.csdn.net/uploads/201407/26/1406383059_8814.jpg",
49         "//img-my.csdn.net/uploads/201407/26/1406383059_2237.jpg",
50         "//img-my.csdn.net/uploads/201407/26/1406383058_4330.jpg",
51         "//img-my.csdn.net/uploads/201407/26/1406383038_3602.jpg",
52         "//img-my.csdn.net/uploads/201407/26/1406382942_3079.jpg",
53         "//img-my.csdn.net/uploads/201407/26/1406382942_8125.jpg",
54         "//img-my.csdn.net/uploads/201407/26/1406382942_4881.jpg",
55         "//img-my.csdn.net/uploads/201407/26/1406382941_4559.jpg",
56         "//img-my.csdn.net/uploads/201407/26/1406382941_3845.jpg",
57         "//img-my.csdn.net/uploads/201407/26/1406382924_8955.jpg",
58         "//img-my.csdn.net/uploads/201407/26/1406382923_2141.jpg",
59         "//img-my.csdn.net/uploads/201407/26/1406382923_8437.jpg",
60         "//img-my.csdn.net/uploads/201407/26/1406382922_6166.jpg",
61         "//img-my.csdn.net/uploads/201407/26/1406382922_4843.jpg",
62         "//img-my.csdn.net/uploads/201407/26/1406382905_5804.jpg",
63         "//img-my.csdn.net/uploads/201407/26/1406382904_3362.jpg",
64         "//img-my.csdn.net/uploads/201407/26/1406382904_2312.jpg",
65         "//img-my.csdn.net/uploads/201407/26/1406382904_4960.jpg",
66         "//img-my.csdn.net/uploads/201407/26/1406382900_2418.jpg",
67         "//img-my.csdn.net/uploads/201407/26/1406382881_4490.jpg",
68         "//img-my.csdn.net/uploads/201407/26/1406382881_5935.jpg",
69         "//img-my.csdn.net/uploads/201407/26/1406382880_3865.jpg",
70         "//img-my.csdn.net/uploads/201407/26/1406382880_4662.jpg",
71         "//img-my.csdn.net/uploads/201407/26/1406382879_2553.jpg",
72         "//img-my.csdn.net/uploads/201407/26/1406382862_5375.jpg",
73         "//img-my.csdn.net/uploads/201407/26/1406382862_1748.jpg",
74         "//img-my.csdn.net/uploads/201407/26/1406382861_7618.jpg",
75         "//img-my.csdn.net/uploads/201407/26/1406382861_8606.jpg",
76         "//img-my.csdn.net/uploads/201407/26/1406382861_8949.jpg",
77         "//img-my.csdn.net/uploads/201407/26/1406382841_9821.jpg",
78         "//img-my.csdn.net/uploads/201407/26/1406382840_6603.jpg",
79         "//img-my.csdn.net/uploads/201407/26/1406382840_2405.jpg",
80         "//img-my.csdn.net/uploads/201407/26/1406382840_6354.jpg",
81         "//img-my.csdn.net/uploads/201407/26/1406382839_5779.jpg",
82         "//img-my.csdn.net/uploads/201407/26/1406382810_7578.jpg",
83         "//img-my.csdn.net/uploads/201407/26/1406382810_2436.jpg",
84         "//img-my.csdn.net/uploads/201407/26/1406382809_3883.jpg",
85         "//img-my.csdn.net/uploads/201407/26/1406382809_6269.jpg",
86         "//img-my.csdn.net/uploads/201407/26/1406382808_4179.jpg",
87         "//img-my.csdn.net/uploads/201407/26/1406382790_8326.jpg",
88         "//img-my.csdn.net/uploads/201407/26/1406382789_7174.jpg",
89         "//img-my.csdn.net/uploads/201407/26/1406382789_5170.jpg",
90         "//img-my.csdn.net/uploads/201407/26/1406382789_4118.jpg",
91         "//img-my.csdn.net/uploads/201407/26/1406382788_9532.jpg",
92         "//img-my.csdn.net/uploads/201407/26/1406382767_3184.jpg",
93         "//img-my.csdn.net/uploads/201407/26/1406382767_4772.jpg",
94         "//img-my.csdn.net/uploads/201407/26/1406382766_4924.jpg",
95         "//img-my.csdn.net/uploads/201407/26/1406382766_5762.jpg",
96         "//img-my.csdn.net/uploads/201407/26/1406382765_7341.jpg"
97     };
98 }
View Code

相关文章:

  • 2021-06-03
  • 2018-04-22
  • 2021-08-01
  • 2021-10-02
  • 2021-08-28
  • 2022-12-23
  • 2022-01-28
  • 2022-12-23
猜你喜欢
  • 2021-11-13
  • 2022-01-11
  • 2021-12-26
  • 2022-01-26
  • 2022-01-07
  • 2021-10-02
  • 2021-10-26
相关资源
相似解决方案