Piszę MIDlet używając LWUIT i obrazy wydają się pochłaniać niesamowitą ilość pamięci. Wszystkie obrazy, których używam, to pliki PNG i są pakowane do pliku JAR. Załaduję je za pomocą standardowej metody Image.createImage (URL). Aplikacja ma wiele formularzy, a każda ma kilka etykiet i przyciski, ale jestem dość pewna, że tylko aktywna forma jest przechowywana w pamięci (wiem, że nie jest ona zbyt godna zaufania, ale Runtime.freeMemory() zdaje się potwierdzać to).Obrazy JavaME - LWUIT pochłaniają całą pamięć
Aplikacja działa dobrze w rozdzielczości 240x320, ale przeniesienie jej do rozdzielczości 480 x 640 i użycie odpowiednio większych obrazów do interfejsu użytkownika zaczęło powodować pojawianie się błędów pamięci. To, co robi aplikacja, to między innymi pobieranie zdalnych obrazów. Aplikacja wydaje się działać dobrze, dopóki nie dojdzie do tego punktu. Po pobraniu kilku plików PNG i powrocie do głównego menu napotkano błąd braku pamięci. Oczywiście sprawdziłem ilość pamięci używanej w menu głównym i było to dość szokujące. To tylko dwie etykiety z obrazami i czterema przyciskami. Każdy przycisk ma trzy obrazy używane dla style.setIcon, setPressedIcon i setRolloverIcon. Obrazy mają rozmiar od 15 do 25 KB, ale usuwając dwa z trzech obrazów używanych dla każdego przycisku (łącznie 8 obrazów), Runtime.freeMemory() wykazały oszałamiające zmniejszenie pamięci o 1 MB.
Tak jak to widzę, albo mam dużo wycieków pamięci (co nie wydaje mi się, żebym to robił, ale przecieki pamięci nie są dokładnie znane jako łatwe do wyśledzenia), robię coś strasznie nie tak z obsługą obrazów lub naprawdę nie ma problemu i po prostu muszę zmniejszyć skalę.
Jeśli ktoś ma jakikolwiek wgląd do oferty, byłbym bardzo wdzięczny.
rozwiązanie ale Tipp:.. zoptymalizować png z optipng (http://optipng.sourceforge.net/) - kawałki obrazów z niewielką liczbą kolorów często do 50% jego wielkości bez redukcji jakości – user181750