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个,每个chunk是1M,所以全部Cache是13M.