保存SD卡缓存有Bug
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Inizia con DataCache.saveData/getData e i metodi put/get della cache mostrati nell’issue, quindi traccia come viene aggiornato lastUsageDates per accessi ripetuti alla stessa chiave. Conferma che put e get ripetuti non accumulino riferimenti File separati per lo stesso percorso memorizzato nella cache e verifica il comportamento della cache con una riproduzione mirata usando una chiave come loginInfo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
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对象,它们的引用值都是不同的,即使它们指向相同的文件。
- Lingua principale
- Java
- Stelle
- 904
- Fork
- 187
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di GcsSloop/diycode
-
魅族PRO5界面滑动很卡顿 Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 15/100
-
屏幕翻转后点击浮动按钮 停止运行 Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
-
登录问题 Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
-
inputmanager 内存泄漏问题 Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
缓存的问题 Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
Tutte le issue di GcsSloop/diycode
Issue simili
-
awaiting triage bug Causes friction Hop Gui P1 P2 Transforms
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
apache/flink-agents#1152 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
jenkinsci/blueocean-plugin#5417 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
objectionary/eo-graphs#75 ·