Android 获取手机内存大小

背景

项目中图片拍照功能是调用系统相机,由于某些手机内存不足,经常调用系统相机后,项目app进程被系统杀掉了,所以采取的措施是:调用系统相机前先判断手机可用内存大小,当可用内存低于500M时,提示用户先清理手机内存。

一 获取手机内存大小方法

/**
     * Get memory info of device.
     */
    @TargetApi(Build.VERSION_CODES.CUPCAKE)
    public static ActivityManager.MemoryInfo getMemoryInfo(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
        am.getMemoryInfo(mi);
        return mi;
    }
/**
     * 内存是否够用
     * @param activity
     * @return
     */
    private boolean memoryIsAvailble(FragmentActivity activity) {
        if (activity == null) return true;
        ActivityManager.MemoryInfo memoryInfo = MemoryUtil.getMemoryInfo(activity);
        if (memoryInfo != null){
            double availMem = memoryInfo.availMem * 1.0/ (1024 * 1024);
            if (availMem > 0 && availMem <= 500){ // 小于500M
                return false;
            }
        }
        return true;
    }
//手机总内存大小
double utilTotalMem = MemoryUtil.getMemoryInfo(this).totalMem * 1.0/ (1024 * 1024);
//手机可用内存大小
double utilAvailMem = MemoryUtil.getMemoryInfo(this).availMem * 1.0/ (1024 * 1024);
//临界值,达到这个值,进程就要被杀死,但是我实际测试发现,也并不是根据这个临界值来杀死app的,没啥用
double utilThresholdMem = MemoryUtil.getMemoryInfo(this).threshold * 1.0/ (1024 * 1024);


Log.e("TAGTAGTAG ", "M MemoryUtil.totalMem: "+ utilTotalMem);
Log.e("TAGTAGTAG ", "M MemoryUtil.availMem: "+ utilAvailMem);
Log.e("TAGTAGTAG ", "M MemoryUtil.utilThresholdMem: "+ utilThresholdMem);

(1) 华为HUAWEI nova 7,总内存8G,totalMem=7503M, availMem=2774M
在这里插入图片描述
(2) 红米8 Pro,总内存6G,totalMem=5616M,availMem=2212M
在这里插入图片描述
(3) 小米4,总内存2G,totalMem=1850M,availMem=522M
在这里插入图片描述

经测试:
1 手机可用内存(availMem)一般是总内存(totalMem)的三分之一;
2 该方法获取的总内存大小(totalMem)接近手机总内存,误差很小。

二 获取app内存大小方法

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        //最大分配内存
        int memory = activityManager.getMemoryClass();
        System.out.println("memory: "+memory);
        //最大分配内存获取方法2
        float maxMemory = (float) (Runtime.getRuntime().maxMemory() * 1.0/ (1024 * 1024));
        //当前分配的总内存
        float totalMemory = (float) (Runtime.getRuntime().totalMemory() * 1.0/ (1024 * 1024));
        //剩余内存
        float freeMemory = (float) (Runtime.getRuntime().freeMemory() * 1.0/ (1024 * 1024));

        Log.e("TAGTAGTAG ", "maxMemory: "+maxMemory);
        Log.e("TAGTAGTAG ", "totalMemory: "+totalMemory);
        Log.e("TAGTAGTAG ", "freeMemory: "+freeMemory);

经测试:
app占用的总内存(totalMemory)在随着app开启的页面越多,逐渐变大,而不是一开始就分配给应用的最大内存。

三 通过命令行获取内存信息

1 在命令行窗口里输入"adb shell",进入shell环境
2 输入"cat /proc/meminfo" 点回车,即可在命令行里显示meminfo文件的内容
例如:

C:\Users\张志峰>adb shell
begonia:/ $  cat /proc/meminfo
MemTotal:        5751004 kB
MemFree:          181588 kB
MemAvailable:    2308672 kB
Buffers:           83412 kB
Cached:          2108464 kB
SwapCached:        96364 kB
Active:          3123004 kB
Inactive:        1155128 kB
Active(anon):    1531752 kB
Inactive(anon):   561900 kB
Active(file):    1591252 kB
Inactive(file):   593228 kB
Unevictable:        3204 kB
Mlocked:            3204 kB
SwapTotal:       3162168 kB
SwapFree:        2464700 kB
Dirty:                76 kB
Writeback:             0 kB
AnonPages:       2077860 kB
Mapped:           905676 kB
Shmem:              4904 kB
Slab:             285728 kB
SReclaimable:     103352 kB
SUnreclaim:       182376 kB
KernelStack:       78208 kB
PageTables:        91780 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6037668 kB
Committed_AS:   108909280 kB
VmallocTotal:   263061440 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
CmaTotal:         540672 kB
CmaFree:           67704 kB
begonia:/ $

在命令行窗口里输入"adb shell ps"可以获取运行应用列表

C:\Users\张志峰>adb shell ps
USER           PID  PPID     VSZ    RSS WCHAN            ADDR S NAME
root             1     0   50728   2528 0                   0 S 
system        1422   475 6555532 171964 0                   0 S com.android.systemui
webview_zygote 1448  476 1737288  16712 0                   0 S webview_zygote
root          1455   474   10288   2656 0                   0 S iptables-restore
root          1467   474   10304   2832 0                   0 S ip6tables-restore
radio         1574   475 4388376  69508 0                   0 S com.android.phone
u0_a16        1580   475 12313548 195328 0                  0 S com.miui.home
root          1884     2       0      0 0                   0 I [kbase_event]
radio         1897   475 4287908  37472 0                   0 S com.mediatek.ims
root          1959     2       0      0 0                   0 I [kbase_event]
system        2119     1   11188   2520 0                   0 S charge_logger
system        2121     1   30884   3288 0                   0 S mcd
system        2122     1  128964   3264 0                   0 S batterywarning
system        2124     1   25752   3212 0                   0 S ged_srv
system        2168   475 4244748  32800 0                   0 S com.mediatek.voicecommand.vis
system        2183   475 4246228  29732 0                   0 S com.goodix.fingerprint
system        2198   475 5502288  28924 0                   0 S com.miui.contentcatcher
system        2222   475 4300200  74592 0                   0 S com.miui.daemon
nfc           2237   475 4304260  74308 0                   0 S com.android.nfc
secure_element 2252  475 4246116  29884 0                   0 S com.android.se
u0_a40        2267   475 4714420 127672 0                   0 S com.miui.voicetrigger
u0_a17        2282   475 4265540  28520 0                   0 S com.xiaomi.mircs
u0_a94        2296   475 4335948  80104 0                   0 S com.xiaomi.xmsf
finddevice    2313   475 4312188  59196 0                   0 S com.xiaomi.finddevice
system        2330   475 4338224  54484 0                   0 S com.mediatek.voicecommand
system        2350   475 4292172  37956 0                   0 S com.miui.face
u0_a100       2418   475 4315864  59136 0                   0 S com.xiaomi.metoknlp
system        2441   475 4266164  54868 0                   0 S com.xiaomi.location.fused
system        2491   475 4427572  81572 0                   0 S com.miui.securitycenter.remote
system        3055 27334   16980   4400 0                   0 S dumpsys
root          3156     2       0      0 0                   0 I [kbase_event]
system        3235 27334   16980   4324 0                   0 S dumpsys
system        3327   475 4263940  59364 0                   0 S com.xiaomi.joyose
root          4653     2       0      0 0                   0 I [kbase_event]
u0_a180       5134   476 2080004 181272 0                   0 S com.tencent.mobileqq
u0_a166       5861   475 4265756  37872 0                   0 S com.miui.mishare.connectivity
root          6307     2       0      0 0                   0 I [kbase_event]
root          6606     2       0      0 0                   0 I [kbase_event]
system        7091 27334   16980   4356 0                   0 S dumpsys
u0_a71        7105   475 4335412  99784 0                   0 S com.miui.hybrid:entrance
u0_a64        7122   475 4275064 126316 0                   0 S com.miui.analytics
system        7294   475 4283532 124984 0                   0 S com.android.settings:remote
u0_a103       7347   475 4319604 113132 0                   0 S com.miui.systemAdSolution
u0_a71        7519   475 4368732 135768 0                   0 S com.miui.hybrid
u0_a55        7574   475 4243636  70636 0                   0 S com.android.smspush
u0_a46        7590   475 4246592  90200 0                   0 S android.ext.services
root          7857     2       0      0 0                   0 S [main_thread]
root          7858     2       0      0 0                   0 S [hif_thread]
root          7859     2       0      0 0                   0 S [rx_thread]
wifi          7860     1 2130656  11196 0                   0 S wpa_supplicant
system        8579 27334   16980   4212 0                   0 S dumpsys
u0_a47        9202   475 4265584  86084 0                   0 S com.lbe.security.miui
system        9379 27334   16980   4068 0                   0 S dumpsys
u0_a137       9713   475 4897420 162256 0                   0 S com.xiaomi.smarthome
system        9728   475 4266584  36540 0                   0 S com.miui.wmsvc
bluetooth     9896   475 4247312  85924 0                   0 S com.xiaomi.bluetooth
u0_a137      10298  9713   83512  14992 0                   0 S libweexjsb.so
system       10468   475 4261556  34592 0                   0 S com.miui.aod
u0_a28       11034   475 4444600 156996 0                   0 S com.google.android.packageinstaller
root         11068     2       0      0 0                   0 I [kbase_event]
root         11219     2       0      0 0                   0 I [fs_suspend_syss]
u0_a180      12210   476 1924300 146116 0                   0 S com.tencent.mobileqq:MSF
u0_a78       12548   475 4249844  78968 0                   0 S com.unionpay.tsmservice.mi
system       12683   475 4258280  88156 0                   0 S com.xiaomi.mi_connect_service
mdnsr        12700     1    5672   1208 0                   0 S mdnsd
system       12712   476 1558848  97200 0                   0 S com.xiaomi.misettings
u0_a180      14895   476 2239724 126456 0                   0 S com.tencent.mobileqq:tool
u0_a180      14964   476 1949940  76008 0                   0 S com.tencent.mobileqq:qzone
system       16501 27334   16980   4324 0                   0 S dumpsys
theme        16576   475 4993880  93896 0                   0 S com.android.thememanager
u0_i49       16652  1448 1548960  27824 0                   0 S com.google.android.webview:sandboxed_process0
system       16983 27334   16980   4028 0                   0 S dumpsys
root         18447     2       0      0 0                   0 I [kworker/u16:2]
system       18530   475 4846756 275692 0                   0 S com.android.settings
u0_a153      18778   475 4277428 129924 0                   0 S com.miui.weather2
system       18806 27334   16980   3780 0                   0 S dumpsys
root         18833     2       0      0 0                   0 I [kbase_event]
u0_a61       18847   475 4265696 107184 0                   0 S com.xiaomi.account:accountservice
system       18937 27334   16980   4268 0                   0 S dumpsys
root         19080     2       0      0 0                   0 I [kworker/6:2]
root         19460     2       0      0 0                   0 I [kworker/7:2]
u0_a754      20002   475 5131724 317664 0                   0 S cn.maitian.app
u0_a754      20038   475 4576740 124156 0                   0 S cn.maitian.app:core
root         20112     2       0      0 0                   0 I [kbase_event]
u0_a754      20191   475 4582636 135400 0                   0 S cn.maitian.app:remote
u0_a171      20881   475 4624224 189620 0                   0 S com.netease.nim.demo
system       20901 27334   16980   4328 0                   0 S dumpsys
u0_a171      20924   475 4282432 108432 0                   0 S com.netease.nim.demo:core
root         20966     2       0      0 0                   0 I [kbase_event]
root         20984     2       0      0 0                   0 I [kworker/5:2]
u0_a106      21030   475 4248496  91700 0                   0 S com.miui.securityinputmethod
root         21074     2       0      0 0                   0 I [kworker/u16:5]
u0_a87       21075   475 4323644 140736 0                   0 S com.baidu.input_mi
root         21127     2       0      0 0                   0 I [kworker/u16:8]
u0_a158      21164   476 2109608 295100 0                   0 S com.homelink.android
u0_a158      21182   476 1849204 108956 0                   0 S com.homelink.android:coreservice
u0_a158      21399   476 1858580 119956 0                   0 S com.homelink.android:remote
root         21429     2       0      0 0                   0 I [kbase_event]
root         21495     2       0      0 0                   0 I [kworker/6:1]
system       21665   475 4252560  97976 0                   0 S com.miui.contentcatcher:autofill
root         21706     2       0      0 0                   0 I [kworker/3:1]
u0_a18       21708   475 4427224 124500 0                   0 S com.android.camera
u0_i127      21765  1448 1667252 137368 0                   0 S com.google.android.webview:sandboxed_process1

shell        21980 21925   11908   4180 0                   0 R ps
system       24311 27334   16980   4356 0                   0 S dumpsys
u0_a230      25426   475 5187384 124748 0                   0 S com.tencent.mm
root         25559     2       0      0 0                   0 I [kbase_event]
u0_a230      25677   475 4923124  64220 0                   0 S com.tencent.mm:push
system       27334   475 4346676 100620 0                   0 S com.miui.powerkeeper
system       27754 27334   16980   4320 0                   0 S dumpsys
system       28316   475 4261484 102464 0                   0 S com.miui.notification:remote
u0_a15       28318   475 4415604  92064 0                   0 S android.process.media
system       29767 27334   16980   4156 0                   0 S dumpsys
root         29901     2       0      0 0                   0 I [kbase_event]
system       31110 27334   16980   4124 0                   0 S dumpsys
system       31486 27334   16980   4352 0                   0 S dumpsys
system       32622 27334   16980   4096 0                   0 S dumpsys

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值