内存泄漏LibGDX-ANdroid
我正在用libgdx制作一个实时墙纸应用程序,在这个程序中,我会根据时间改变资产。对于e、 从早上6点到下午6点,我有“早上的图形”,然后我有“晚上的图形”,从下午6点到早上6点 我构建资产的方式如下 我有12个AtlasRegion类型的静态数组,1个静态纹理区域变量和1个静态纹理变量 我有两个静态函数loadMorning()和loadnight()用于加载资产 在函数中,我加载如下 对于所有数组,如果它们不为null,则执行array.clear() 然后加载区域。处理TextureRegion变量并在重置其值之前将texture变量设置为null 正在发生的事情是,在每次更换资产之后,内存似乎都在增加 作为一个用户,我使用这个应用程序来查看内存 当我第一次启动我的应用程序时。。在应用程序中显示为68MB 第1天早上统计数据 第一天内存泄漏LibGDX-ANdroid,android,memory-leaks,libgdx,Android,Memory Leaks,Libgdx,我正在用libgdx制作一个实时墙纸应用程序,在这个程序中,我会根据时间改变资产。对于e、 从早上6点到下午6点,我有“早上的图形”,然后我有“晚上的图形”,从下午6点到早上6点 我构建资产的方式如下 我有12个AtlasRegion类型的静态数组,1个静态纹理区域变量和1个静态纹理变量 我有两个静态函数loadMorning()和loadnight()用于加载资产 在函数中,我加载如下 对于所有数组,如果它们不为null,则执行array.clear() 然后加载区域。处理TextureReg
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):释放1619K的所有组件的GC,71%的释放3281K/11072K,暂停14ms,总计15ms
D/dalvikvm(2451):所有释放1517K的GC,71%释放3281K/11072K,暂停11ms,总计11ms
I/dalvikvm堆(2451):将堆(frag情况)增长到6.548MB,用于13311595字节分配
D/dalvikvm(2451):GC_并发释放1862K,67%释放4127K/12376K,暂停2ms+2ms,总计13ms
D/dalvikvm(2451):GC_显式释放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
这会持续增加,第二天早上应用程序中显示的大小约为150MB
为了更好地理解这一点,我需要一些指南。针对代码中无法控制的资源泄漏的一个补救措施是重新启动应用程序。您可以选择或执行System.exit() 但在这样做之前,你必须这样做
请注意,尽管不同的android版本应该都是兼容的,但它们在应用程序重启行为方面并不兼容。至少,v2.x和v4.0确实有所不同(在v2.x系统中,exit()导致应用程序在最顶层活动关闭的情况下重新启动),不确定最新版本。注意到。。希望它不会被要求。谢谢现在的问题是如何重新启动壁纸:(