Android galéria hiba

Akinek Android-os telefonja van biztosan találkozott már azzal a jelenséggel, hogy a galériában a képek előnézete vagy nem jelent meg vagy rossz kép volt ott (gondolok itt arra, hogy más kép jelent meg előnézetben mint ami a valós kép). Megtúrtam a netet, de nem találtam kielégítő megoldást a problémára, úgyhogy magam vágtam bele a hiba feltárásának (persze az Android-os fórumok is segítettek rátalálni a megoldásra, de mondjuk magyar oldalakon semmit sem találtam ezzel kapcsolatba…). A dolgot csak nehezítette (mint utóbb kiderült), hogy SonyEricsson X10-esem van.

Menjünk sorban.

Először azt találtam, hogy ki kell törölni a /sdcard/DCIM/.thumbnails mappa tartalmát. Így is tettem, de semmi hatása nem volt (persze volt közben újraindítás is).
Másodjára azt találtam, hogy a képnéző program cache-ét kell kiüríteni a /sdcard/Android/data/com.cooliris.media/cache mappában. Ezt is próbáltam, de semmi. Mint utóbb kiderült, hiába Cooliris a nézegető az X10-ben, mégsem itt vannak a képek előnézetei és a hozzátartozó adatbázis.
Harmadjára már csak magamra számíthattam. Az előző két vonalon elindulva átnéztem a /sdcard/Android/data/ mappa tartalmát. Találtam ott egy /Android/data/com.sonyericsson.gallery mappát is, ennek a Cache mappájának a tartalmát is töröltem, majd telefon restart. És igen, működött 🙂 De az igazi megoldás az első és a harmadik módszer együttes alkalmazása.

Miért?

A mappák tartalma, hogy könnyebb legyen megérteni, hogy miért kell a két pontot végrehajtani:
Az /sdcard/DCIM/.thumbnails mappa tartalmazza az összes telefonon található kép előnézetét (a fényképekét és az egyéb mappában található képekét egyaránt). Ezek a fájlok valamiért sajnos nem törlődnek automatikusan ha törlünk egy képet, szóval csak szaporodnak és szaporodnak. Van még itt két adatbázis fájl is (a .thumbdata3–1967290299 és a .thumbdate3-1763508120), de ahogy tapasztaltam csak a fényképezés során megjelenő utoljára fotózott képek elérését tartalmazzák. Ezek a fájlok (utoljára fotózott képek) a /sdcard/DCIM/.thumbnails/camera mappában vannak. Érdemes néha kitakarítani, mert automatikusan a rendszer nem végzi ezt el.
A második lépésben leírt Cooliris cache törlés X10-nél hatástalan, mert saját verziót használ a SonyEricsson.
A harmadik lépés viszont a legfontosabb! Az X10 esetében ugyanis másik mappát használ a rendszer, a /Android/data/com.sonyericsson.gallery -t, ezért az itteni Cache mappa teljes tartalmának a törlése után és a telefon újraindítását követően fogja a készülék legenerálni az előnézeti képeket a /sdcard/DCIM/.thumbnails mappába (ezért kell a re-indexálás előtt törölni a teljes tartalmát), valamit az ezekhez tartozó adatbázist a /Android/data/com.sonyericsson.gallery/cache mappába.

Remélem tudtam segíteni ezzel a leírással.

Android memóriakezelés

A kezdet

Pár hónapja vettem egy Sony Ericsson Xperia X10-es telefont. Eddig szinte csak Symbian-os vagy S40-es Nokiáim voltak, de a technológiai fejlődés megállíthatatlanul utat tört magának és nekem is lépést kellett tartanom a korra. Hosszas mérlegelés után döntöttem ennél a készüléknél és operációs rendszernél.

Idő szülte érdeklődés

Akinek hozzám hasonlóan ez egy ismeretlen terep, az gyorsan belefuthat a sokak által használt “Task killer” programokba. Én is így voltam ezzel, mindenki javasolta, hogy szükséges és kell. De ahogy egyre jobban elmélyedtem ebben a témában kiderült, hogy nem csak szükségtelen de még kis mértékben káros is. Káros a telefon készenléti idejére, ugyanis az alkalmazások újraindítása megterheli a telefont (processzor, akkumulátor használat növekedés az alkalmazások újraindításakor). Miután kilőttem egy csomó task-ot kisvártatva ismét elindult majdnem mind újra. Sajnos erre a problémára nem igazán találtam választ (magyar oldalakon) sehol. Ezért úgy döntöttem megosztom ezt az infromáció kissé konyhanyelven, hogy más ne szívjon annyit mint én.

Megoldás

A kérdésemre a választ itt találtam meg. Mivel ezen az oldalon minden le van írva ezért én itt csak kivonatolom az olvasottakat. A régebbi (1.5 és 1.6) Android rendszerek esetében még nem volt teljesen tökéletes a memória kezelése, ott még volt értelme task killert használni. Viszont a 2.1 és 2.2 (és fölött) már szinte semmi haszna nincs. Egyszerűen fogalmazva a rendszer mindig annyi memóriát szabadít fel magának amennyire szüksége van, intelligensen a következő módon. A memóriában tárolt programok 5 csoportra vannak bontva melyek a következők:

Android memóriakezelés

  1. Active processes (Aktív folyamatok) – Ez a éppen használat, látható folyamatok, mondjuk egy e-mail írása.
  2. Visible processes (“Látható” folyamatok) – Ezek is szem előtt vannak még (widget mondjuk), de itt nincs interakció a felhasználó és a program között.
  3. Started Service Processes (Szervizek) – Ezek már olyan folyamatok melyek a háttérben futnak, nincs interakció a felhasználóval és nem is láthatóak. Kisebb az erőforrás igényük is ezáltal.
  4. Background processes (Háttér folyamatok) – Ezek a szerviz nélküli, háttérbe tett folyamatok. Ezek olyan folyatok amelyekből már “gyomlálhat” a rendszer. A legrégebben “látott” folyamatot törli először ha szükség van erőforrásra.
  5. Empty processes (“Üres” folyamatok) – Ez az egyszer már elindított, de azóta bezárt folyamatok. Azért vannak a memóriában, hogy ha legközelebb szükség lenne rájuk, akkor sokkal gyorsabban be tudnak töltődni (el tudnak indulni), mintha ezt a memória kártyáról tennék. Itt is igaz a legrégebben “látott” (leállított) folyamatot veszi ki először a memóriából a rendszer ha erőforrást kell felszabadítania.

Bővebb, angol nyelvű leírás itt olvashatjátok (fentebb is linkelt): http://mobworld.wordpress.com/2010/07/05/memory-management-in-android/

Remélem tudtam segíteni egy kicsit az Android memóriakezelés megértésében.