Najlepsza praktyka podczas buforowania plików w systemie Android

Obecnie moja aplikacja buforuje pliki obrazów w podkatalogu cache dla aplikacji. Obrazy są używane w ListView i przechowywane w HashMap od SoftReferences do Bitmaps.

Moje pytanie jest takie, jaki jest najlepszy sposób na buforowanie tych plików graficznych bez pompowania przestrzeni, z której korzysta moja aplikacja i pozostaje responsywna z punktu widzenia użytkownika.

Rzeczy, o które się martwię:

Wiem, że użytkownik może wyczyścić pamięć podręczną i że odbywa się to automatycznie, gdy brakuje miejsca pamięci wewnętrznej, ale czuję, że większość użytkowników zobaczy kilka MB aplikacji i odinstalować go. Ponadto, jeśli przestrzeń jest stale niska, moja aplikacja będzie po prostu pobierać obrazy, co wydaje się wolniejsze.

Większość urządzeń ma preinstalowaną kartę SD, ale co należy zrobić, gdy nie jest włożona? Karta SD może być również wolniejsza w porównaniu z pamięcią wewnętrzną, co wpływa na wydajność mojej aplikacji.

Czy powinienem włączyć opcję wyboru lokalizacji pamięci podręcznej?

Czy powinienem próbować zarządzać rozmiar mojej pamięci podręcznej (czy to w / cache lub / sdcard) lub po prostu zapomnieć o tym?

Dziękuję za poświęcony czas (wiem, że jest długi) i proszę pisać wszelkie istotne doświadczenia.

Author: skaffman, 2010-08-21

3 answers

Nie mogę zaoferować Ci kompleksowego zestawu najlepszych praktyk, ale mogę zaoferować to, czego nauczyłem się do tej pory:

Zarządzanie pamięcią podręczną to dobry pomysł. Pamięć podręczna mojej aplikacji jest taka, że wiem, że nigdy nie będę potrzebował więcej niż pewnej liczby plików w pamięci podręcznej, więc za każdym razem, gdy wstawiam nowy plik do pamięci podręcznej, usuwam najstarsze pliki, dopóki nie przekroczę limitu, który ustawiłem. Możesz zrobić coś podobnego na podstawie rozmiaru lub po prostu wieku.

Buforowanie karty SD, jeśli jest dostępna, jest dobrym pomysłem, jeśli pamięć podręczna musi zajmować dużo miejsca. Będziesz musiał zarządzać tą przestrzenią równie ostrożnie, ponieważ nie zostanie ona automatycznie wyczyszczona. Jeśli buforujesz Pliki Obrazów, umieść je w katalogu zaczynającym się od kropki, na przykład "/yourAppHere/.cache". Dzięki temu zdjęcia nie pojawią się w galerii, co jest naprawdę denerwujące.

Pozwolenie użytkownikowi na wybór lokalizacji pamięci podręcznej wydaje mi się przesadą, ale jeśli Twoi odbiorcy są bardzo geekiczni, może to być doceniam to.

Nie zauważyłem wiele kary podczas buforowania do SD, ale nie wiem, jak aplikacja wykorzystuje te informacje.

 15
Author: BenTobin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-23 17:12:43

Każdy ma dobre pomysły. Podoba mi się pomysł używania SoftReference's, chociaż nie jestem pewien, jak często są one czyszczone, ponieważ to różni się tak bardzo od VM DO VM. Możesz połączyć to ze zwykłą HashMap, aby zapobiec czyszczeniu całej pamięci podręcznej co kilka minut.

EclipseLink ma kilka różnych implementacji pamięci podręcznej i całkiem dobrą dokumentację . Prawdopodobnie mógłbyś skorzystać z kilku pomysłów z realizacji (np. LRU, MRU itp.). np.,

  • hard cache
  • soft cache
  • combined hard / soft cache

Ponieważ dostrajasz pamięć podręczną w dół do nitty-gritty, polecam dostrajanie go do różnych urządzeń w oparciu o twarde specyfikacje. Normalnie jest to kiepski projekt, ale zakres sprzętu, na którym działa twoje oprogramowanie, IMHO. np.,

  • wykrywa ilość dostępnej pamięci na karcie SD. Większość nowych smartfonów jest wyposażona w karty SD o pojemności wielu GB, a te są całkiem trudne do wypełnienia przy regularnym użytkowaniu dla większości użytkowników. Używaj! Możesz również wykryć ilość miejsca dostępnego na karcie SD przy starcie i zwiększyć / zmniejszyć rozmiar pamięci podręcznej przy starcie.
  • Wykryj ilość dostępnej pamięci i skonfiguruj pamięć podręczną mając to na uwadze. Jeśli użytkownik korzysta z aplikacji wymagającej dużej ilości sprzętu, nie sądzę, aby miał coś przeciwko temu, że składa się z 200MB pamięci RAM i zapewnia bardzo szybką obsługę, zwłaszcza, że wydał dużo pieniędzy, aby mieć telefon z 1-2GB PAMIĘCI RAM.
Powodzenia!
 2
Author: The Alchemist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-24 13:56:49

Czy powinienem dołączyć opcję wyboru lokalizacji pamięci podręcznej?

IMO: nie, niech to będzie najprostsze, jak to tylko możliwe (z wyjątkiem tego, że możesz włączyć ustawienie advance dla expert user)

Czy powinienem próbować zarządzać rozmiarem mojej pamięci podręcznej (czy to w /cache lub / sdcard) lub po prostu o tym zapomnieć?

IMO: jest to opcjonalne, jest to podwójny miecz: więcej pracy na tle pomoże użytkownikowi wygodniej, ale także bardziej podatne na błędy

Użyj 3rd libs : IMO używanie 3rd library jako Picasso jest lepsze, obsługuje pamięć podręczną automatycznie według kolejności: Memory cache -> Disk cache - > Network

 0
Author: NguyenDat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-18 03:01:15