2015-12-31 4 views
2

Я устанавливаю текстуру на материале с помощью этого кода. В разделе «Память» в студии Android я заметил, что память увеличивается каждый раз при запуске этого кода. Похоже на утечку памяти или плохое управление памятью для меня. Как мне настроить текстуру повторно во время выполнения на материал, чтобы память управлялась должным образом.TextureAttribute.createDiffuse утечки памяти?

Код:

Timer.schedule(new Timer.Task() { 
       @Override 
       public void run() { 
        materials.get(5).set(TextureAttribute.createDiffuse(new Texture("400px/"+mat5+".png"))); 

       } 
      }, delay2); 

ответ

1

Проблема заключается в каждый раз, когда Timer выполнил Task, вы создаете новый Texture. Textures: Disposable и как таковой, должны быть disposed, когда они больше не используются. В приведенном выше коде вы не сохраняете ссылку на созданный Textures, чтобы потерять возможность dispose из них. Это создает утечку памяти.

Одним из решений этого является использование AssetManager вместо того, чтобы управлять своими активами самостоятельно. Этот класс призван облегчить вам работу по управлению потреблением памяти ваших активов.

Другое решение - сохранить ссылки на созданные Texutres и убедиться, что они должным образом disposed, когда это не нужно.

Лично я бы пошел с первым решением. Сначала это может быть пугающе, но как только AssetsManager освоен, он действительно хорошо справляется, когда дело доходит до управления активами.

Смежные вопросы