내 앱에는 일부 미리보기 이미지가 포함 된 다른 목록보기가 있습니다. 오늘 리팩토링을 시작했으며 LRU 캐싱을 구현하려고합니다. 안드로이드 가이드 라인을 따르고 있지만 전체 애플 리케이션을 위해 단 하나의 LRU 캐시를 초기화하는 것이 더 나은지 궁금하거나 각리스트보기에서 LRU 캐시를 더 잘 초기화하는 것이 좋습니다. 나는 outOfMemory를 두려워합니다. 따라서 다음 질문에 답할 수 없습니다. - 싱글 톤 패턴으로 초기화 된 하나의 LRU 캐시가 좋은 아이디어입니까? - 메모리가 부족하면 outOfMemory 상황으로 인해 LRU 캐시가 다음과 같이 초기화됩니까? 메모리가 부족한 경우LRU 캐시 : 전체 앱에 대해 하나만 초기화 하시겠습니까?
@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 캐시 만 문제가 될 수 있습니까?
- 전체 앱에 대해 둘 이상의 LRU 캐시가 문제가 될 수 있습니까?
안녕하세요! 이 시점에서 나는 listview 생성자에서 weakHashMap을 초기화하고 있는데, 그 맵에 축소판을 넣는다. 나는 그것이 LRU 캐시를 사용하는 것이 더 좋다고 생각했지만, 대답을 읽은 후에 나는 조금 겁이났다. – aeroxr1
방금 WeakHashMap을 보았다. 나는 그것이 그 클래스에서 약한 참조가 아닌 * 키 *라는 것을 깨닫지 못했다. 그런 이유로, 나는 Map>와 같은 맵을 만들고 싶을 것 같다. 나는 그 일을 처음부터 끝내기를 바랬다. 'LruCache' 클래스는 GC에 함축 된 암묵적인 관계가 없으므로, 거의 쓸모가 없습니다. 그래서 옳은 길에있을 수 있습니다. 그것의 쓰레기를 시험해라. 만일 그것이 받아 들일 만하게 행동하면, 승리를 선언하고, 그것을 하루라고 부른다. –
약한 해시지도에서 약한 참조가있는 열쇠입니까 ??? 정말 ? 나는 이것을 몰랐다 !!! – aeroxr1