2014-12-30 5 views
2

Я создаю приложение для живых обоев с libgdx, в котором я изменяю активы в зависимости от времени. Для. например, с 6 утра до 6 вечера. У меня есть «утренняя графика», после чего у меня есть «вечерняя графика» с 18:00 до 6:00.Memory Leak LibGDX ANdroid

Я так структурировали активов выглядит следующим образом

У меня есть 12 статических массивов типа AtlasRegion 1 статическая переменная Texture область и 1 статическая переменная текстуры.

У меня есть две статические функции loadMorning() и loadEvening() для загрузки активов.

В funcions загружаю следующим

Для всех массивов, если они не равны нулю у array.clear() затем загрузить регионы. Утилизируйте переменную TextureRegion и установите для переменной текстуры значение null до сброса их значений.

Дело в том, что происходит в том, что после каждого изменения активов памяти, кажется, растет Как perepective пользователя Я использую это приложение, чтобы увидеть Запоминающее устройство

https://play.google.com/store/apps/details?id=mem.usage&hl=en

Когда я начинаю мое приложение для в первый раз .. это показывает, как 68MB в приложении,

день1 Утро STATs

День 1

ID  Heap Size  Allocated  Free   %Used #Objects 
1  10.812 MB  3.186 MB  7.626 MB  29.47% 45,405  



        Pss Private Private Swapped  Heap  Heap  Heap 
       Total Dirty Clean Dirty  Size Alloc  Free 
       ------ ------ ------ ------ ------ ------ ------ 
    Native Heap  0  0  0  0 16620  4285  38 
    Dalvik Heap  8692  8604  0  0 11072  3293  7779 
Dalvik Other  1374  1216  0  0 
     Stack  96  96  0  0 
    Other dev 33016  4908  4  0 
    .so mmap  1266  692  136  0 
    .apk mmap  160  0  116  0 
    .dex mmap  287  20  8  0 
    Other mmap  5  4  0  0 
     Unknown  1431  1412  0  0 
     TOTAL 46327 16952  264  0 27692  7578  7817 

Objects 
       Views:  1   ViewRootImpl:  0 
     AppContexts:  3   Activities:  0 
       Assets:  2  AssetManagers:  2 
     Local Binders:  11  Proxy Binders:  19 
    Death Recipients:  0 
    OpenSSL Sockets:  0 

SQL 
     MEMORY_USED:  0 
    PAGECACHE_OVERFLOW:  0   MALLOC_SIZE:  0 

день 1 Вечерние Статистика

ADB журнал после того, как вечерние активы загружены

D/dalvikvm (2451): GC_FOR_ALLOC освободил 1619K, 71% бесплатно 3281K/11072K, остановился 14ms, общая 15ms

Д/dalvikvm (2451): GC_FOR_ALLOC освободил 1517K, 71% бесплатно 3281K/11072K, остановился 11ms, общая 11ms

Я/dalvikvm-куча (2451): Grow кучи (осколочный случае) 6.548MB для распределения 1331595 байт

D/dalvikvm (2451): GC_CONCURRENT освободил 1862K, 67% бесплатно 4127K/12376K, приостановлен + 2 мсок 2ms , всего 13 мс

Д/dalvikvm (2 451): GC_EXPLICIT освободил 2384K, 74% бесплатно 3268K/12376K, остановился 2ms + 3ms, общая 27ms

ID  Heap Size  Allocated  Free   %Used #Objects 
1  10.816 MB  3.191 MB  7.625 MB  29.50% 45,525  


This adb log right after change 


        Pss Private Private Swapped  Heap  Heap  Heap 
       Total Dirty Clean Dirty  Size Alloc  Free 
       ------ ------ ------ ------ ------ ------ ------ 
    Native Heap  0  0  0  0 16728  4346  29 
    Dalvik Heap  1654  1576  0  0 11076  3348  7728 
Dalvik Other  1435  1296  0  0 
     Stack  100  100  0  0 
    Other dev 63332 32644  4  0 
    .so mmap  1110  692  116  0 
    .apk mmap  7  0  4  0 
    .dex mmap  586  20  368  0 
    Other mmap  5  4  0  0 
     Unknown  1504  1488  0  0 
     TOTAL 69733 37820  492  0 27804  7694  7757 

Objects 
       Views:  1   ViewRootImpl:  0 
     AppContexts:  3   Activities:  0 
       Assets:  2  AssetManagers:  2 
     Local Binders:  10  Proxy Binders:  17 
    Death Recipients:  0 
    OpenSSL Sockets:  0 

SQL 
     MEMORY_USED:  0 
    PAGECACHE_OVERFLOW:  0   MALLOC_SIZE:  0 

память показывает в приложении теперь 117MB Это продолжает расти, на следующее утро размер, показанный в приложении, составляет около 150 МБ.

Мне нужны указатели, где лучше понять это.

ответ

0

Одним из средств защиты от утечек ресурсов в коде, который вы не можете контролировать, является перезапуск приложения. Вы либо kill the process, либо do System.exit().

Но перед этим вам необходимо schedule a restart.

Обратите внимание, что, хотя разные версии Android должны быть совместимы, они не совместимы с поведением при перезагрузке приложения. По крайней мере, v2.x и v4.0 действительно отличались (в версии v2.x System.exit() произошел перезапуск приложения, при этом верхняя активность закрыта), не уверены в последних выпусках.

+0

Замечание .. Надеюсь, это не потребуется. Благодаря !! – windwaker

+0

Теперь проблема в том, как перезапустить обои :( – windwaker