Android 获取手机内存大小
背景
項(xiàng)目中圖片拍照功能是調(diào)用系統(tǒng)相機(jī),由于某些手機(jī)內(nèi)存不足,經(jīng)常調(diào)用系統(tǒng)相機(jī)后,項(xiàng)目app進(jìn)程被系統(tǒng)殺掉了,所以采取的措施是:調(diào)用系統(tǒng)相機(jī)前先判斷手機(jī)可用內(nèi)存大小,當(dāng)可用內(nèi)存低于500M時(shí),提示用戶先清理手機(jī)內(nèi)存。
一 獲取手機(jī)內(nèi)存大小方法
/*** 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;} /*** 內(nèi)存是否夠用* @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){ // 小于500Mreturn false;}}return true;} //手機(jī)總內(nèi)存大小 double utilTotalMem = MemoryUtil.getMemoryInfo(this).totalMem * 1.0/ (1024 * 1024); //手機(jī)可用內(nèi)存大小 double utilAvailMem = MemoryUtil.getMemoryInfo(this).availMem * 1.0/ (1024 * 1024); //臨界值,達(dá)到這個(gè)值,進(jìn)程就要被殺死,但是我實(shí)際測(cè)試發(fā)現(xiàn),也并不是根據(jù)這個(gè)臨界值來(lái)殺死app的,沒(méi)啥用 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,總內(nèi)存8G,totalMem=7503M, availMem=2774M
(2) 紅米8 Pro,總內(nèi)存6G,totalMem=5616M,availMem=2212M
(3) 小米4,總內(nèi)存2G,totalMem=1850M,availMem=522M
經(jīng)測(cè)試:
1 手機(jī)可用內(nèi)存(availMem)一般是總內(nèi)存(totalMem)的三分之一;
2 該方法獲取的總內(nèi)存大小(totalMem)接近手機(jī)總內(nèi)存,誤差很小。
二 獲取app內(nèi)存大小方法
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);//最大分配內(nèi)存int memory = activityManager.getMemoryClass();System.out.println("memory: "+memory);//最大分配內(nèi)存獲取方法2float maxMemory = (float) (Runtime.getRuntime().maxMemory() * 1.0/ (1024 * 1024));//當(dāng)前分配的總內(nèi)存float totalMemory = (float) (Runtime.getRuntime().totalMemory() * 1.0/ (1024 * 1024));//剩余內(nèi)存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);經(jīng)測(cè)試:
app占用的總內(nèi)存(totalMemory)在隨著app開(kāi)啟的頁(yè)面越多,逐漸變大,而不是一開(kāi)始就分配給應(yīng)用的最大內(nèi)存。
三 通過(guò)命令行獲取內(nèi)存信息
1 在命令行窗口里輸入"adb shell",進(jìn)入shell環(huán)境
2 輸入"cat /proc/meminfo" 點(diǎn)回車,即可在命令行里顯示meminfo文件的內(nèi)容
例如:
在命令行窗口里輸入"adb shell ps"可以獲取運(yùn)行應(yīng)用列表
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_process1shell 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總結(jié)
以上是生活随笔為你收集整理的Android 获取手机内存大小的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微信小程序源代码_HiApp聊天工具
- 下一篇: 俄罗斯方块 UWP 版