概述
一般情况下,Android代码里面的图片都是PNG格式的,那此格式的一张图片占据的内存跟什么有关系呢,图片大小,还是像素值?带着这个问题我们写一个小的demo验证下。不加背景的情况下,查看应用内存信息如下:
$ adb shell dumpsys meminfo com.example.designmode
Applications Memory Usage (kB):
Uptime: 163111904 Realtime: 163111904
* MEMINFO in pid 12538 [com.example.designmode] *
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
—— —— —— —— —— —— ——
Native Heap 3464 3352 0 0 7716 7688 27
Dalvik Heap 1552 1504 0 0 8374 1444 6930
Dalvik Other 236 236 0 0
Stack 132 132 0 0
Gfx dev 576 204 0 0
Other dev 5 0 4 0
.so mmap 1163 108 108 52
.apk mmap 109 0 0 0
.ttf mmap 126 0 48 0
.dex mmap 112 0 108 0
.oat mmap 1003 0 64 0
.art mmap 774 428 0 0
Other mmap 14 4 0 4
Unknown 104 100 0 0
TOTAL 9370 6068 332 56 16090 9132 6957
Objects
Views: 51 ViewRootImpl: 1
AppContexts: 3 Activities: 1
Assets: 3 AssetManagers: 3
Local Binders: 8 Proxy Binders: 13
Parcel memory: 2 Parcel count: 10
Death Recipients: 0 OpenSSL Sockets: 0
SQL
MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0
Asset Allocations
zip:/data/app/com.example.designmode-2/base.apk:/resources.arsc: 2K
在此基础上我们给布局加一个背景,一张小图片,大小为96*96原生的ic_launcher图片,但属性是fill_parent,覆盖全屏的,查看内存信息发现上涨了300KB左右。几乎无变化。
adb shell dumpsys meminfo com.example.designmode
Applications Memory Usage (kB):
Uptime: 163223104 Realtime: 163223104
* MEMINFO in pid 12960 [com.example.designmode] *
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
—— —— —— —— —— —— ——
Native Heap 3673 3572 0 0 7996 7689 306
Dalvik Heap 1380 1332 0 0 9172 1062 8110
Dalvik Other 204 204 0 0
Stack 148 148 0 0
Gfx dev 576 204 0 0
Other dev 5 0 4 0
.so mmap 1186 108 116 52
.apk mmap 109 0 0 0
.ttf mmap 126 0 48 0
.dex mmap 112 0 108 0
.oat mmap 1086 0 108 0
.art mmap 972 448 168 0
Other mmap 14 4 0 4
Unknown 104 100 0 0
TOTAL 9695 6120 552 56 17168 8751 8416
Objects
Views: 51 ViewRootImpl: 1
AppContexts: 3 Activities: 1
Assets: 3 AssetManagers: 3
Local Binders: 8 Proxy Binders: 13
Parcel memory: 3 Parcel count: 12
Death Recipients: 0 OpenSSL Sockets: 0
SQL
MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0
Asset Allocations
zip:/data/app/com.example.designmode-1/base.apk:/resources.arsc: 2K
此时我们把布局的背景图片换成一张大图,大小为2560*1440,发现内存剧增26M左右!!!主要体现在两个部分:Dalvik Heap 跟 Gfx,前者是图片占据的内存,计算方法:4*2560*1440/1024=14400KB ,后者是图层相关的,也占据了12M左右内存。
$ adb shell dumpsys meminfo com.example.designmode
Applications Memory Usage (kB):
Uptime: 162954038 Realtime: 162954038
* MEMINFO in pid 12136 [com.example.designmode] *
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
—— —— —— —— —— —— ——
Native Heap 3745 3628 0 0 8044 7728 315
Dalvik Heap 14693 14636 0 0 25641 15467 10174
Dalvik Other 208 208 0 0
Stack 180 180 0 0
Gfx dev 12258 8848 0 0
Other dev 5 0 4 0
.so mmap 1225 108 116 52
.apk mmap 111 0 0 0
.ttf mmap 126 0 48 0
.dex mmap 120 0 116 0
.oat mmap 1165 0 108 0
.art mmap 1036 448 168 0
Other mmap 14 4 0 4
Unknown 104 100 0 0
TOTAL 34990 28160 560 56 33685 23195 10489
Objects
Views: 51 ViewRootImpl: 1
AppContexts: 3 Activities: 1
Assets: 3 AssetManagers: 3
Local Binders: 8 Proxy Binders: 13
Parcel memory: 3 Parcel count: 12
Death Recipients: 0 OpenSSL Sockets: 0
SQL
MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0
Asset Allocations
zip:/data/app/com.example.designmode-1/base.apk:/resources.arsc: 2K
结论:代码中慎用像素很高的图片。
最后
以上就是内向羊为你收集整理的Android图片占据的内存大小分析的全部内容,希望文章能够帮你解决Android图片占据的内存大小分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复