Android开源代码解读の地图照片应用Panoramio的实现详解(五)

在前面几篇文章中,我们或多或少了解到了ImageManager类的存在,它负责从Panoramio服务器下载搜索区域内的图片数据,同时进行解析。当然,这一切是在独立的后台线程中进行的,下载的情况通过观察者模式通告给ImageList进行显示(ImageManager是被观察对象Subject)。注意,ImageManager是一个单例类。

本文涉及到的知识点有两个:JSON和WeakReference。

1)JSON(www.json.org)是目前流行的网络数据交换格式,它是JavaScript Object Notation的缩写。JSON数据是一系列键值对的集合,相信曾做过web开发的对这个不会陌生。Android自带的JSON API位于libcore\json\src\main\java\org\json目录中,包括JSON.java、JSONArray.java等6个Java源文件,在代码开头处有个声明可以看下:

Note: this class was written without inspecting the non-free org.json sourcecode.

可以看出,这是是Google自己实现的一个JSON解析类。

2)WeakReference是Java四种引用类型之一的弱引用,其他三种分别是强引用StrongReference,软引用SoftReference和虚引用PhantomReference(又叫幽灵引用)。这四种引用和垃圾收集器GC的交互各不相同,下面就来简单分析下:

StrongReference是Java的默认引用,它会尽可能长地存活在Java虚拟机中,当没有任何对象指向它时,GC执行后才会被回收;

SoftReference和WeakReference类似,最大的区别在于软引用会尽可能长地保留它自己,直到出现Java虚拟机内存不足时才会被回收;因此,软引用常用于对内存敏感的程序中;

WeakReference当它所引用的对象在Java虚拟机中不再存在强引用时,GC执行后弱引用才会被回收;

PhantomReference完全类似于没有引用,虚引用对对象本身没有太大影响,对象甚至感觉不到虚引用的存在。虚引用主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,它必须和引用队列ReferenceQueue结合使用。

除了强引用外,其他几个引用对应的类都定义在Java.lang.ref包中,而且都继承自Reference类,下面看下它们的源代码吧:

SoftReference.java文件如下所示:

接下来是WeakReference.java,它的实现几乎和SoftReference一样,只是类名不同而已:

而最后的PhantomReference.java的实现稍微有点区别,它的get函数返回null:经过上面知识点的分析,ImageManager类也就没什么其他好讲的了,直接看代码以及注释应该就很清楚了:






posted on 2012-02-25 00:31  android开发实例  阅读(501)  评论(0编辑  收藏  举报

导航