gallery3D(2)

android gallery3D源码分析

1.CacheService.java中写缓存:sAlbumCache.put(ALBUM_CACHE_LOCALE_INDEX, sDummyData, 0);

  第一个是key,这里是正常数据,当然还有别的key,key分别是-1,-2,-3,-4,-5。

2.DiskCache.java中,执行上面的写的过程,这里先得明白他的cache怎么装的:

    它是由很多称之为“片”的文件组成的,形成一个List形式:private final

 

LongSparseArray<RandomAccessFile> mChunkFiles = new LongSparseArray<RandomAccessFile>();

即mChuckFiles就是整个cache,里面包括很多chunk(即片),每一个chunk大小为1MB.

当要写入某一个chunk里面的时候,先要找到他在mChuckFiles里面的索引值即chunkIndex,由

 

mChunkFiles.get(chunkIndex);来获取这个文件,chunkIndex怎么来的呢?

private LongSparseArray<Record> mIndexMap;

Record record = mIndexMap.get(key);这里的key就是上面用put方法传过来的

 

ALBUM_CACHE_LOCALE_INDEX的值(就是-5)

int chunkIndex = record.chunk;

这么一步步来的。

当然了,第一次都是空的,也就是get不到东西mChunkFiles.get(chunkIndex);和Record record =

 

mIndexMap.get(key);都get不到,那么第一次就先把东西放进去,mIndexMap.put(key, new Record

 

(chunkIndex, record.offset, data.length, record.sizeOnDisk, timestamp));(记录key值)以及 final

 

String chunkFilePath = mCacheDirectoryPath + CHUNK_FILE_PREFIX + chunk; chunkFile = new

 

RandomAccessFile(chunkFilePath, "rw");mChunkFiles.put(chunk, chunkFile);(三句代码来新建一个

 

chunkfile并放到cache列表里面)

 

注意:Record是内部类,只是一个数据集合类而已,相当于文件描述信息。每个cache(即chunk)对应一个。

private final LongSparseArray<RandomAccessFile> mChunkFiles = new LongSparseArray<RandomAccessFile>(); mChunkFiles最大装13个,每个chunk1M,所以全部Cache13M.

 

来自: http://hi.baidu.com/fortianwei/blog/item/824853eeff3b9bf6b3fb9520.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值