1.內存限制
內存限制不同機器不同,取決於配置文件 /system/build.prop
中的配置
dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=96m
dalvik.vm.heapsize=256m
和這3個配置相關
dalvik.vm.heapstartsize 表示 初始內存大小是8m
dalvik.vm.heapgrowthlimit 表示標準內存大小是96m 一般應用都是這麼大
dalvik.vm.heapsize 表示 在manifest配置文件中application標籤下配置 android:largeHeap="true"時的內存大小
在代碼中獲取最大內存:
Runtime.getRuntime().maxMemory()
2.apk大小限制
apk安裝包大小理論上沒有限制。但是各個應用商店爲了有大小限制google play 要求小於50M , 擴展包可以擴展到2g
壓力測試:經過壓力測試800M的apk是沒問題的只是安裝的時間比較長。1.6G的apk包則把手機弄死機了。。。
3.方法數限制
google官方文檔有描述
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
Android平臺的Java虛擬機Dalvik在執行DEX格式的Java應用程序時,使用原生類型short來索引DEX文件中的方法。這意味着單個DEX文件可被引用的方法總數被限制爲65536。
一個dex文件的 方法數 [0,65536]
如何避免方法過量:
1.減少大library依賴
2.用proguard減少無用的方法
如果業務邏輯需要衝破限制怎麼辦:
如何衝破這個限制 使用多dex方案可以參考: http://blog.ubone.com/blog/2014/11/12/androidying-multidex/
4.最大線程數
android本身就是linux系統 所以查看命令和linux一樣
查看線程限制:
cat /proc/sys/kernel/threads-max
15193
查看所有限制:
ulimit -a
127|shell@hwt1701:/ $ ulimit -a
time(cpu-seconds) unlimited
file(blocks) unlimited
coredump(blocks) unlimited
data(KiB) unlimited
stack(KiB) 8192
lockedmem(KiB) 65536
nofiles(descriptors) 1024
processes 7596
flocks unlimited
sigpending 7596
msgqueue(bytes) 819200
maxnice 40
maxrtprio 0
resident-set(KiB) unlimited
address-space(KiB) unlimited
注:此命令 mac也適用