ActivityManager(2)—getMemoryClass()及getLargeMemoryClass()

本文详细解析了Android中ActivityManager的getMemoryClass()与getLargeMemoryClass()方法,介绍了这两种方法如何帮助开发者了解应用的内存限制,以及它们之间的核心区别。
摘要由CSDN通过智能技术生成

ActivityManager:getMemoryClass()及getLargeMemoryClass()

1.作用:用于获取应用可以使用的最大内存。

2.源码:

public int getMemoryClass() {
    return staticGetMemoryClass();
}
/** @hide */不对外暴露的方法
static public int staticGetMemoryClass() {
    String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", "");
    if (vmHeapSize != null && !"".equals(vmHeapSize)) {
        return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
    }
    return staticGetLargeMemoryClass();
}
public int getLargeMemoryClass() {
    return staticGetLargeMemoryClass();
}
/** @hide */
static public int staticGetLargeMemoryClass() {
    String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m");
    return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length() - 1));
}

3.分析及说明

两个方法共同的功能是返回当前设备的每个应用程序使用内存的近似值。提供一个内存限制的界限,方便开发者可以再规定的内存限制内让应用运行的更好。
返回值以兆为单位;基线Android内存是16(这恰好是这些设备的java堆内存限制);更有些设备可能返回24或更高的数字。
两者区别在于:getMemoryClass()是系统为应用分配的内存,并没有额外的扩充;
而getLargeMemoryClass()是开发者通过设置manifest文件中的<application>标签中largeHeap属性的值为"true",获得应用可使用的最大内存;
但是作为开发者,建议不要配置manifest获取最大内存,这使得应用在扩展性方面有很大限制,建议优化内存已达到节省内存的目的。
SystemProperties:
String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", "");
其中,SystemProperties是系统的属性,它可以通过get()/set()进行对系统的属性进行读/写。
从代码的角度看,两个方法的核心区别在于SystemProperties.get()中的参数
dalvik.vm.heapgrowthlimit:系统对应用的内存限制的值。
dalvik.vm.heapsize:系统可提供给应用的最大内存使用值(不顾其他进程的死活?)。

4.使用

ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
int memoryClass = am. getMemoryClass();              
int largeMemoryClass = am. getLargeMemoryClass(); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值