Buduję aplikację dla systemu Android, na której każda jednostka ma bitmapę, która reprezentuje jej ikonkę. Jednak każda jednostka może być duplikowana (na przykład mogą istnieć 3 kopie encji asdf).Słaba mahmap z słabymi odniesieniami do wartości?
Jednym ze sposobów jest załadowanie wszystkich duszków z góry, a następnie umieszczenie właściwego sprite'a w konstruktorach obiektów.
Jednak chcę dekodować bitmapy leniwie, aby konstruktorzy jednostek dekodują bitmapy. Jedyny problem polega na tym, że zduplikowane obiekty ładują tę samą bitmapę dwukrotnie, używając 2x pamięci (lub n razy, jeśli encja jest tworzona n razy).
Aby to naprawić, stworzyłem SingularBitmapFactory, który będzie przechowywać dekodowaną bitmapę w haszyszu i jeśli ta sama bitmapa zostanie ponownie zapytana, po prostu zwróci poprzednio mieszaną, zamiast budować nową. Problem polega jednak na tym, że fabryka posiada kopię wszystkich map bitowych, więc nigdy nie uda się zebrać śmieci.
Jaki jest najlepszy sposób na zmianę mapy izolacyjnej na wartość o słabo referencyjnych wartościach? Innymi słowy, chcę strukturę, w której wartości nie będą miały wartości GC, jeśli jakikolwiek inny obiekt będzie zawierał odniesienie do niej, ale tak długo, jak żaden inny obiekt go nie odwoła, może to być GC.
niż ty! Jest dość prosty i BARDZO skuteczny w przypadku obsługi bitmapy. Używanie absolutnej ścieżki jako klucza i jest bardzo wygodne i pomogło pozbyć się przecieków. –