android检测内存,Android内存检测实现

实现android内存检测的作用在哪里?

当你处理一个非常大的图片缩放的时候,由于使用了ARGB8888的色彩,导致一个像素是4Byte。一个2000×3000分辨率的图片消耗的内存是:23 437.5KB。这时候消耗的内存是2.3M的内存。android2.2官方ROM最大内存是24M,那么打开美图秀秀,处理一张2000像素的图的时候就会发生问题, 4.0官方ROM的话,你的app最大内存限制是64M,4.4的时候,内存限制是96M。都不是很大,所以内存还是很紧张的。

这时候在一些手机上就会出现OOM的情况。

所以,在遇到这种情况的时候需要先检测下还能不能再申请内存了!

PS:现在很多ROM厂商都修改了最大内存限制,我做过测试我的L36H,内存限制是256MB。这样的话可以使用更多的内存。但是还有很多品牌没有做修改,三星是没有修改4.0  4.2都是64M,moto也没有,Nexus 系列更是 没有修改。

这里我写了个工具类,供使用的时候操作,获取手机剩余内存和app的剩余可消耗的内存。

废话不说直接上代码!

package com.commons.utils.memory;

import android.annotation.TargetApi;

import android.app.ActivityManager;

import android.content.Context;

import android.os.Build;

import android.util.Log;

/**

*内存的工具类

*/

public class MemoryUtils {

private static final String TAG="MemoryUtils";

/**

* 打印当前手机内存信息应用的内存信息

*/

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)

public static void printMemoryInfo()

{

final String TAG="MemoryUtils.printMemoryInfo()";

//打印当前APP内存信息

//开启了 android:largeHeap="true" 后,就是启用了流氓应用的内存限制

//打印当前应用内存信息

Runtime rt = Runtime.getRuntime();

Log.d(TAG, "APP当前内存状态: 最大可申请内存:" + rt.maxMemory() / 1024/1024 +"MB 已申请内存:" + rt.totalMemory() / 1024/1024 + "MB 空闲内存:"+rt.freeMemory()/1024/1024+"MB");

}

/**

* 获得app可用内存的字节数 这个类不需要try,catch理论上不会报错

*/

@TargetApi(Build.VERSION_CODES.HONEYCOMB)

public static long getAppSurplusMe()

{

final String TAG="MemoryUtils.getAppSurplusMe()";

Runtime rt = Runtime.getRuntime();

//一下参数单位为字节数

long totalMemory=rt.totalMemory();//这个是已经申请的内存,等于已经使用的内存加上空闲内存

long maxMemory=rt.maxMemory();//最大内存限制

long freeMemory=rt.freeMemory();

//假如最大内存限制是64M,已经申请了34M,空闲4M,那么其实当前使用的是:(34-4)M,而实际当前有效可使用的内存是:64-(34-4)=34;

//64-(34-4)=34 请允许我引用高数老师的那句话:"同理可得" 64-34+4

//so

long surplusMemory=maxMemory-totalMemory+freeMemory;

Log.d(TAG, "系统当前内存状态: 最大可申请内存:" + rt.maxMemory() / 1024/1024 +"MB 已申请内存:" + rt.totalMemory() / 1024/1024 + "MB 空闲内存:"+rt.freeMemory()/1024/1024+"MB");

return surplusMemory;

}

/**

* 获得手机可用内存的字节数 这个类不需要try,catch,理论上不会报错

*

* 这个方法要慎用 容易导致崩溃 特别在引导页的时候 低内存手机容易发生崩溃

*

* @param context

* @return

*/

public static long getPhoneSurplusMe(Context context)

{

ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE);

ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();

am.getMemoryInfo(mi);

return mi.availMem;

}

}

来自:http://blog.csdn.net/weizongwei5/article/details/41894783

标签:

代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值