我正在制作一个带有libgdx的动态壁纸应用程序,我根据时间更改资产。对于。例如从早上6点到下午6点,我有“早晨图形”,之后我从下午6点到早上6点有“晚间图形”。
我构建资产的方式如下
我有12个静态数组类型AtlasRegion 1静态纹理区域变量和1个静态纹理变量。
我有两个静态函数loadMorning()和loadEvening()来加载资源。
在功能中我加载如下
对于所有数组,如果它们不为null,则执行array.clear() 然后加载区域。在重置它们的值之前,处理TextureRegion变量并将纹理变量设置为null。
正在发生的事情是,每次资产变更后,记忆似乎都会增加 作为一个用户,我正在使用这个应用程序来查看内存
https://play.google.com/store/apps/details?id=mem.usage&hl=en
当我第一次启动我的应用时......它在应用中显示为68MB,
Day1 Morning 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 D / dalvikvm(2451):GC_FOR_ALLOC释放1517K,71%免费3281K / 11072K,暂停11ms,总计11msI / dalvikvm-heap(2451):将堆(frag case)增长到6.548MB以进行1331595字节分配
D / dalvikvm(2451):GC_CONCURRENT释放1862K,67%免费4127K / 12376K,暂停2ms + 2ms,总计13ms D / dalvikvm(2451):GC_EXPLICIT释放2384K,74%免费3268K / 12376K,暂停2ms + 3ms,总计27msID 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 这种情况在不断增加,第二天早上app中显示的大小约为150 MB。
我需要一些指示,以便更好地理解这一点。
答案 0 :(得分:0)
针对您无法控制的代码中的资源泄漏的一种补救措施是重新启动应用程序。您可以kill the process或 System.exit()。
但在此之前,您必须schedule a restart。
请注意,虽然不同的Android版本都应该兼容,但它们在应用程序重启行为方面不兼容。至少,v2.x和v4.0确实不同(在v2.x中System.exit()导致应用程序重启,最顶层的活动关闭),不确定最新版本。