亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Android中獲取當前內存使用量?

如何在Android中獲取當前內存使用量?

白衣非少年 2019-07-22 16:13:48
如何在Android中獲取當前內存使用量?我使用了/proc/meminfo并解析了命令響應,但是結果顯示:內存總數:94348 kB內存空閑:5784 kB手段。它顯示只有5MB的空閑內存。Android手機有可能嗎?我的手機上只安裝了5-6個應用程序,沒有其他任務正在運行。但是,這個命令仍然顯示出內存非常少。有人能澄清這一點嗎?或者,在Android中還有其他方法來獲得內存的使用嗎?
查看完整描述

3 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

注意:這個答案測量設備的內存使用/可用。這不是你的應用程序可以使用的東西。為了衡量你的應用程序正在做什么,并被允許做什么,使用Android開發者的答案.


Android文檔-ActivityManager.MemoryInfo

  1. 解析/proc/meminfo命令。您可以在這里找到參考代碼:在Android中獲取內存使用情況

  2. 使用下面的代碼并獲取當前RAM:

    MemoryInfo mi = new MemoryInfo();ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    activityManager.getMemoryInfo(mi);double availableMegs = mi.availMem / 0x100000L;//Percentage can be calculated for API 16+double percentAvail = mi.availMem / (double)mi.totalMem * 100.0;

對0x100000L數的解釋

1024 bytes      == 1 Kibibyte 1024 Kibibyte   == 1 Mebibyte1024 * 1024     == 10485761048576         == 0x100000

很明顯,這個數字被用來從字節轉換為mebi字節

我們只需要計算一次總內存。因此,只在代碼中調用1點,然后再重復調用第2點的代碼。


查看完整回答
反對 回復 2019-07-22
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

這取決于您要獲得的內存查詢的定義。


通常,您想知道堆內存的狀態,因為如果它占用了太多內存,您就會得到OOM并使應用程序崩潰。

為此,您可以檢查下一個值:

final Runtime runtime = Runtime.getRuntime();final long usedMemInMB=(runtime.totalMemory() - runtime.freeMemory()) / 1048576L;final long maxHeapSizeInMB=runtime.maxMemory() / 1048576L;final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;

“usedmemInMB”變量越接近“maxHeapSizeInMB”,就越接近availHeapSizeInMB到零,你得到的OOM越近。(由于內存碎片,您可能在達到零之前獲得OOM。)

這也是DDMS內存使用工具所顯示的。


或者,有真正的RAM使用,這就是整個系統使用了多少-請參閱接受答案計算一下。


更新:由于AndroidO使您的應用程序也使用本機RAM(至少對于位圖存儲,這通常是占用大量內存的主要原因),而不僅僅是堆,所以情況發生了變化,您得到的OOM更少(因為堆不再包含位圖,請檢查)。這里),但是如果你懷疑你有內存泄漏,你仍然應該注意內存的使用。在AndroidO上,如果內存泄漏本應導致舊版本的OOM,那么它似乎就會崩潰,而無法捕捉到它。下面是如何檢查內存使用情況:

 val nativeHeapSize = Debug.getNativeHeapSize()
 val nativeHeapFreeSize = Debug.getNativeHeapFreeSize()
 val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
 val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize

但我認為最好使用IDE的分析器,它使用圖表實時顯示數據。

因此,Android O的好消息是,由于OOM存儲了太多大位圖,所以很難得到崩潰,但壞消息是,我認為在運行時不可能捕捉到這樣的情況。


查看完整回答
反對 回復 2019-07-22
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

下面是計算內存使用情況的一種方法當前正在運行的應用程序:

public static long getUsedMemorySize() {

    long freeSize = 0L;
    long totalSize = 0L;
    long usedSize = -1L;
    try {
        Runtime info = Runtime.getRuntime();
        freeSize = info.freeMemory();
        totalSize = info.totalMemory();
        usedSize = totalSize - freeSize;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return usedSize;}


查看完整回答
反對 回復 2019-07-22
  • 3 回答
  • 0 關注
  • 1429 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號