私のアプリには、いくつかのサムネイルを含む別のリスト ビューがあります。今日、私はリファクタリングを開始し、LRU キャッシングを実装したいと考えています。私は Android のガイドラインに従っていますが、アプリ全体に対して 1 つの LRU キャッシュのみを初期化する方がよいのか、それともリスト ビューごとに LRU キャッシュを初期化する方がよいのか疑問に思っています。outOfMemory が怖いです。したがって、私自身では答えられない次の質問があります: - シングルトン パターンで初期化された 1 つの LRU キャッシュは良い考えですか? - メモリが少ない場合、次の LRU キャッシュの初期化で outOfMemory 状況が発生しますか?
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// Get max available VM memory, exceeding this amount will throw an
// OutOfMemory exception. Stored in kilobytes as LruCache takes an
// int in its constructor.
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = maxMemory / 8;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in kilobytes rather than
// number of items.
return bitmap.getByteCount() / 1024;
}
};
...
}
メモリが少ない場合、LRU キャッシュは自動的に解放されますか? LRU キャッシュを使用すると、アプリがメモリを解放する際に問題が発生するかどうか疑問に思っています (メモリ不足のためアプリがクラッシュしますか?)
アプリ全体で LRU キャッシュが 1 つしかありませんが、問題になる可能性はありますか?
- アプリ全体に複数の LRU キャッシュがありますが、問題になる可能性はありますか?