GcsSloop / GcsSloop/diycode

保存SD卡缓存有Bug

Aperta
#5 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
904
Fork
187
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

DataCache:
public void saveData(@NonNull String key, @NonNull T data) {
mLruCache.put(key, data);
mDiskCache.put(key, data, ACache.TIME_WEEK); // 数据缓存时间为 1 周
}
执行到最后:

/**
* 保存 byte数据 到 缓存中
*
* @param key 保存的key
* @param value 保存的数据
*/
public void put(String key, byte[] value) {
File file = mCache.newFile(key);
....
mCache.put(file);
}

private File newFile(String key) {
return new File(cacheDir, key.hashCode() + "");
}
private void put(File file) {
.....
Long currentTime = System.currentTimeMillis();
file.setLastModified(currentTime);
lastUsageDates.put(file, currentTime);
}
每次put操作,会新建一个File对象,然后将该引用保存到lastUsageDates中
///////////////////////////////////////////////////////
get操作
public T getData(@NonNull String key) {
T result = (T) mLruCache.get(key);
if (result == null) {
result = (T) mDiskCache.getAsObject(key);
if (result != null) {
mLruCache.put(key, result);
}
}
return result;
}

/**
* 获取 byte 数据
*
* @param key
* @return byte 数据
*/
public byte[] getAsBinary(String key) {
RandomAccessFile RAFile = null;
boolean removeFile = false;
try {
File file = mCache.get(key);
....
}
private File get(String key) {
File file = newFile(key);
Long currentTime = System.currentTimeMillis();
file.setLastModified(currentTime);
lastUsageDates.put(file, currentTime);

return file;
}

每次get操作,都会创建一个新的File对象,然后将这个File引用保存到lastUsageDates中。
//////////////////////////////////////////////////////////////////
那么,bug就是,比如,我存放一个SD卡缓存,key是loginInfo,保存到SD卡中的一个文件。
然后,我不断去get,会不断添加新的File引用到lastUsageDates。lastUsageDates中,使用的key是File引用值,每个新创建的File对象,它们的引用值都是不同的,即使它们指向相同的文件。

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.