00:06
来把它整一样,下面呢,我们要做的一个很重要的工作就是怎么样去动态的去显示我们的图片。我们专门把这个拿过来啊,动态显示列表中的图片。在这里面啊,我们的图片呢,现在是在我们的服务器端的,对吧,假设这是我们的服务器端,这是我们的客户端啊,我们的服务器端呢,有好多张图片。啊,我现在呢,要显示一个列表。啊,列表里面的每一行呢,都有一张图片需要去展示,需要显示啊,譬如说它把它拉过来要显示。
01:01
但是我们知道。除了第一次的时候,我要去请求一次,以后后面不能再请求了吧。对吧,那好了,那我问大家。我我关机以后,我再开机以后还需要请求这个图片吗?需不需要。那你要需要的话,那你打开一个,你你去用你的新闻客户端是吧,新闻客户端里面,它里面是展示了一个列表啊是吧,那个列表的那个那个新闻。你图片是每次都一上来都是都是开始看不见,后来过一会才看得见的吗?是吗?是不是以前的老数据的话,他是不是用的用的是以前的老图片呢?什么叫老图片。是不是已经存在本地了呀?对吧,那也就是说我们的图片啊,第一次啊,看到还是这样,第一次的时候会去请求一下得到这张图片吧,是吧,那第二次我即使我关机再重启。
02:11
这个图片是重新请求的吗?不是。那你说。这一个图片以什么形式保存在我的手机里面呢?所以文件的形式啊,对吧,它应该是保存在我的手机本地的存储空间里面,以文件的形式保存啊。对吧,好。还有一个是啊,那这个地方,那如果它只是以文件的形式来保存的话,我是不是每一次都要去加载图片呢?那你在想我是一个列表,我的列表是不是可以不断的滑动啊。是吧,好,假设当前呢,显示的图片A,这里面呢,显示图片B,我我往上拉,是不是A要进去吧,AA这个四川是用来用来显示其他的一些图片呢,好abcd啊这些图片那我再往下滑。
03:12
我问大家。你说他再次看到A的时候,是重新去加载的那个本地的图片吗?是吗?那是的话,那我每次是不是都要去重新去加载一次我的这一个图片,图片文件吗。现在我本地是有图片文件的吧。那读取图片文件是不是也要一定的时间,对不对?啊,最快的是什么呢?我要显示一个图片,你说最快的是什么?我们最终要显示三图片,我们说过了,是不是需要一个better map get map对象吧,他。我这内存里面有这样一个对象,我就可以显示出来一张图片吧,这个是最快的,对不对。
04:02
嗯,最快的是它没问题吧,就最想我最想希望的就是有一张bit对象,我直接拿过来显示。对不对啊,提示才是什么,是不是本地手机本地也就手机内部的对吧?啊本地啊叫手机本地版。的图片文件对吧。这个是不是稍微要慢一点,但呢也挺快,其实很快就能显示出来,对不对?好,那最慢的是谁啊。是服务器端的呀,啊,服务器的图片文件。是吧,这是最慢的,甚至有可能啊,慢到你受不了。啊。那其实我们现在说的这三个啊,就是我们要跟大家说的啊,图片的三级缓存。
05:12
有这样一个概念啊好,那普遍的三级缓存啊,比如说一级是什么对吧,一级缓存这里面三级不就是三个级别的缓存吗?一级二级还有什么三级,好,现在看一级缓存到底是指的什么缓存?它叫内存缓存对吧,那内存缓存里面缓存的是什么呀。是缓存的,是bit map对象没问题吧,那用什么结构来缓存呢?对吧,你缓存一个对象肯定用容器对不对,容器无非就是list或者是卖。
06:06
那现在我们就要面临一个选择,到底是用list呢,还是用map?对吧。这个里面很关键,就是他们取数据的时候的方式不一样,如果是历史,它根据什么下标来取数据。我map了,根据什么K来举数据。真正的一般用于缓存结构的,基本上都是用的map,没有基本上没有用历史的。Map它的特点就是根据k ku什么是不算,你说map value是什么?你想换成什么呀,对,你想换成什么,那个点就是什么。那K是什么呢?我们说过了,K是什么意思?可以我们说是个标识对吧,那也就是说它用来区别不同的value吧。
07:05
对不对,那个不同的B的map对象是不是对应不同的图片呢?它们的区别在哪呀?区别在哪?就是不同的图片,就是我们服务器上的图片,这里面我们服务是不是很多图片呢。你看。呃,名字不一样是吧?但是我们手上抓的是名字吗?不是,我们手上抓的什么?是不是U啊,也就是说不同的图片它的ul不一样吧,那就说只要ul不一样,那是不是对应不同的bit map呀?也就是说我们复用的时候,我们是根据ul去找那个贝特麦宝宝。嗯,对啊。这一个K跟大家说一下用。Map结构啊,保存。嗯,跟大家说一下K是什么呢?URL对吧,Value是什么,这一看就看明白了,对不对啊好。
08:10
下面这说的是一级缓存,那下面来看二级缓存。二级缓存是指什么缓存呢?叫本地啊,一般是用SD卡来存啊,本地文件缓存啊,就是本地文件。本地的文件来看一下它缓存的是什么,那就是啊,就本地缓存吧。缓存的就是什么东西。是不是图片文件没问题吧?好,那它缓存的位置在哪呢?既然是缓存一个文件,那肯定是要要确定一个位置吧,位置啊date我们用一下那个SD卡是吧?Story这个写的什么呢?SD卡SD卡下面安卓我们存在这个里面来啊在什么date下面,Package name下面呢,Feels。
09:22
是吧,这一个是不是就是图片呐,图片文件了吧,啊后面跟的是图片文件名。这意思吧,什么,譬如说我们一个什么叉叉叉点JPG是不是有可能啊。嗯,好,这说的是二级缓存。好,下面一个呢,叫三级缓存,三级缓存就是我们的叫远程服务器缓存,那远程服务器缓存它缓存的是什么是什么呀,也是什么图片文件,也是图片文件,那缓存的位置了,这个就不好说了,就是我们是不是只是有一个虚拟路径呢。
10:12
它存在,它不存在这了吗。就这个。这不就存在它的图片吗?对吧,嗯,这就是缓存,也就是说缓存。你们理解的缓存是不是就内存了?啊,有一个是内存级的缓存是吧,内存就是运行时内存,这个运行内存就是我要不运行了。它那个内存要没了,被清理掉了,你说那个数据是没了呀,还有一种就是持久化的缓存。就是持久化存储空间,譬如说举个例子,我们的磁盘硬盘对吧?OK,那硬盘它有个什么特点?是不是掉了电以后再起来,他说还在呀,嗯,这就是了,那如果说我掉了电,你说那个运行时内存里面还在吗?不在了嘛,对不对,嗯,就这样的一个特点啊。
11:06
就是一个是临时的,一个是永久的。对吧,好。就是这一个,来我把它写一下啊。这个存储的位置就是远程服务器了。嗯,的应用中。好。这个没问题了吧,我们先要把它搞懂以后,下面再说怎么样去。用下面一步如何使用三级缓存?那使用三级款呢,他手上你手上有一个什么,我们手里面握着的是个什么呢?就是一个UR,就是这个问题呢,可以转换成另外问题就是啊,如何根据图片的ul。
12:06
动态显示图片,动态显示图片,这也是它们俩其实是同一个问题啊。我们要去回答这样一个问题啊,等同于这样一个问题,把它呢,给它整到这里,嗯,好。下面我们来看啊。这个地方我现在呢有一个ul假设啊,我有这样一个ul使定URL就图片U,我们是不是有一个image pass吗?好等于什么呢,我来去搞定一个,来随便找一个啊。这天不有很多吗?这不他吗?这是一个图片虚拟路径吗?嗯,我们手上就有一个它,我们来看一下怎么来做。
13:01
大下我拿到这个了,下面呢,来放在下面吧。你说我首先一上来啊,我手上有一个有一个图片地址,还有一个image view啊,这个得说和一个和image view对象,你得有一个它吧,你没它怎么显示出来对不对,Image view对象,好了先来看我们来第一步,你说怎么办去。这里面你在想,我们拿着这个图片的地址,难道一上来就是去请求吗?不是你要老这样的话,那那那一级环境二级环就没用了,对不对,他说有可能已经访问过了呀。这不好说,来第一步啊。根据ul从。一级环境中取吧,中取对应的什么东西,是不是b map对象啊,算了吧。
14:09
这一取,就有两种可能性。好。B说,如果得到了干嘛?是不是显示啊。结束了吧。没了。嗯。到此就结束啊好了,下面如果那没得到没有,如果有或者没有吧,来,如果没有啊,譬如说我进入进入二吧。我记住啊好,我们来看啊,怎么做啊怎么做。啊啊,那我是不是从二级缓存找啊啊,从二级缓存中找。
15:01
从二级缓存中查找,那查找啊,大家看啊,这个查找的话,根据什么来找呢?嗯,来。跟什么的。你,你手上只有他。你手上只有这个角对不对,那怎么办?先得到什么东西,文件名是吧,在我们的那个SD卡的存储空间里面找啊。在啊,得到文件名啊,并在。啊,SD卡的缓存。目录下找对应的文件。图片文件。这一找可能有是不可能没有啊。
16:02
啊,或者说加载吧。对了。严明。并加载,并在啊图片文件中缓存目录下面加载对应的图片文件。加载得到一个什么呀。没有,我加了一个图片文件得到是什么的呀,是不是bit map对象啊。好,但是这一定会返回一个B对象吗?不一定啊,如果得到了,如果返回,那说明什么呀,是不是没有啊对吧?好,那如果返回的是啊,如果。有症状。是不是显示啊,显示你有不就显示了吗?这个地方对吧?啊,当前如果加的得到一个B的,如果有不就显示了吗?打打开。
17:07
还要需要做一个事。是不是要缓存到一级缓存中去啊,一旦到了二级缓存,说明一级缓存没有吧。显示呃,缓存到什么一级缓存中没理吧。嗯,保存到一级缓存,或者说缓存到一级缓存好下面,那如果没有进入什么进入三啊。能看懂吧。进入三就比较麻烦了,来看一下这个当前一二都在哪个线程执行。主线执行。知道吧,啊,那只有在我们三的时候,这个时候,因为我们三是干嘛去,是不是要启动分线程联网请求啊。
18:03
好,启动分线程联网请求。另外请求得到的是一个什么呀。是不是最终也要得到的是一个bit map对象吧,你你这个地方是一个图片的地址呀。你最终是不是要把这个数据封装成一个bit map?交。B。嗯嗯,请求得到吧,得到bit map等下好下面。这个时候啊,大家看到也会有两个结果。好,先把,如果没有怎么做。也就是说我返回的是返回来B外,它是不是一个对象,它是个空的,也就是说你的地址不对,是不是有可能有啊,你对应的那个地址那个图片被删掉了,是不是有可能。
19:05
啊,那怎么办呢,你说。如果没有,那说明说明了一个问题,就是地址不对,反正没有对应对应的图片。干嘛看到我会显示一个显示,呃,提示错误的的图片,就是有一张图片代表是没有加载对应的图片的一个错误图片。啊。好,还有这个地方还有一个事没没说,就是你在启动分线程去请求之前。你还需要做一个事。显示代表正在加载的图片就是。代表提示正在加载代表。
20:03
我知道大家能明白啊,就先要显示默认图片嘛,对不对,对吧。这里面有两张。图片比较有意思,一个是代表正在加载的一个代表什么错误的图片。嗯。好。下面啊,如果没有我就是写这个错误,那就结束了吧,就没了,那就结束了啊,此时就结束好下面。来看一下啊,在这个地方,这个也是结束,把这个也写一下,这个也是结束了吧,嗯,好,那如果有怎么做。肯定是显示肯定是必必然的吧,还有呢啊这个时候啊有三步需要做,除了显示,还有是不是缓存呢,缓存到一级缓存,缓存到什么二级缓存。
21:06
是不是都在做啊?王了吧?嗯,此时最终就结束了。就这样的一个流程啊,这里面这两个啊非常重要,一个是图片三级缓存指的是哪三级。啊,它们的特点是什么对吧,都跟大家说了一下,再一个如何使用3G缓存,这也是大家必须得知道的。好,我们呢,先停下来。
我来说两句