保存SD卡缓存有Bug
まだ誰も着手していません。
評価
調査の方向性
DataCache.saveData/getData と、issue に示されている cache の put/get メソッドから始め、1つのキーへのアクセスを繰り返したときに lastUsageDates がどのように更新されるかを追跡します。同じキャッシュ済みパスに対して、put と get を繰り返しても個別の File 参照が蓄積されないことを確認し、loginInfo のような1つのキーを使った焦点を絞った再現で cache の動作を検証します。
索引モデルが issue の本文から書いたものです。
説明
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对象,它们的引用值都是不同的,即使它们指向相同的文件。
- 主要言語
- Java
- スター
- 904
- フォーク
- 187
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
GcsSloop/diycode のほかの issue
-
魅族PRO5界面滑动很卡顿 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 15/100
-
屏幕翻转后点击浮动按钮 停止运行 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
-
登录问题 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 25/100
-
inputmanager 内存泄漏问题 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
-
缓存的问题 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
GcsSloop/diycode の issue をすべて見る
似ている issue
-
awaiting triage bug Causes friction Hop Gui P1 P2 Transforms
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
apache/flink-agents#1152 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
jenkinsci/blueocean-plugin#5417 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
objectionary/eo-graphs#75 ·