/ / Бързо разтоварване на растерни изображения от паметта - java, android, bitmap

Бързо разтоварвайте карти от паметта - java, android, bitmap

Създавам тази Android игра в Java. Имам доста изображения, но не трябва да ги използвам наведнъж, затова създадох клас Resource Manger, който се грижи за използваните Bitmap. В момента правя нещо подобно:

bitmap.recycle()
bitmap = null

System.gc (also tried Runtime.getRuntime().gc())

Първо, има ли някакъв начин за по-бързо разтоварване на растерните изображения от паметта или е възможно някак си да провери дали те всъщност са изчистени, за да мога да завиша екрана за зареждане?

Отговори:

1 за отговор № 1

Няма гаранция, че събирачът на боклука ще се изпълни, когато се опитаме System.gc () като gc () очаква някои предварителни условия катоенергиен глад. Така че е съвсем очевидно, че извикването на gc () просто губи критични CPU цикли. Като разработчик можем да направим ненужни обекти за gc collectable като анулираме препратките.

Има няколко техники за оптимизация, които могат да бъдат полезни при създаването на игрална система (игра).

  1. Използвайте текстура. Ето едно пример.

  2. Използвайте Sprite и SpriteSheets (Тя дава по-малконад главата на системата, отколкото зареждането на отделните растерни изображения). много отворени игра двигатели са там, които използва this.If не искате да ги използвате, за да получите представа как да се създаде от нулата от тези източници.

  3. Използвайте тези стандартни андроид doc за това как Зареждане на големи картини ефективно и Кеширане на растерни изображения за по-добро използване на растерното изображение. Идеята е, когато потребителите на устройството не са достатъчно ефективни, за да се справят с количеството обработка и / или паметта е по-малко за вашата игра, винаги можете да намалите растерното изображение (компромис с качество за по-добър отговор).

  4. Винаги тествайте приложението си срещу проблеми с изтичането на паметта. Тук е хубав пост това ще помогне.

  5. Съхранявайте InMemory (не освобождавайте веднъж използваните) елементи, които се използват няколко пъти в играта в една и съща сцена.Поради това е необходимо много време за зареждане на изображения в паметта.

Надявам се това да ви помогне.


0 за отговор № 2

Както каза Силвайн, Система.gc и приятели събира пълния боклук и може да бъде доста бавен. Java машината периодично стартира GC, а периодът се настройва в зависимост от това колко свободна памет е налична в даден момент.

Най-добрият избор за мен е да използвам някаква растерна графикаpooling: има набор от готови за Bitmap екземпляри, които можете да придобиете от и пуснете в пула, и да управлявате буферите в кеш, използвайки LRU политики.

С правилното финизиране можете да получите нулева ценасъздаването и унищожаването на битмапните екземпляри, тъй като те се обединяват, а буферните инстанции, съдържащи растерни данни, ще бъдат динамично заредени и извадени от паметта в зависимост от употребата.