2012-07-09 22 views
4

記憶似乎是一個很大的話題,我無法找到具體的答案。 我已經得到了堆中有多少可用的答案,我知道應該使用多少。我需要答案如何以編程方式確定我的應用程序使用堆的內存量是多少?我使用了多少內存?Android:我的應用使用多少內存?

+1

看看http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android和http://kohlerm.blogspot.in/2009/04/analyzing -memory-usage-off-your-android.html – user370305 2012-07-09 06:03:32

回答

3

這工作:

Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo(); 
    Debug.getMemoryInfo(memoryInfo); 

    String memMessage = String.format("App Memory: Pss=%.2f MB\nPrivate=%.2f MB\nShared=%.2f MB", 
    memoryInfo.getTotalPss()/1024.0, 
    memoryInfo.getTotalPrivateDirty()/1024.0, 
    memoryInfo.getTotalSharedDirty()/1024.0); 

    Toast.makeText(this,memMessage,Toast.LENGTH_LONG).show(); 
    Log.i("log_tag", memMessage); 
+0

爲什麼除以1024? 根據Android文檔,結果以kB(1000的倍數)表示,不以KB或KIB表示。 https://developer.android.com/reference/android/os/Debug.MemoryInfo.html https://en.wikipedia.org/wiki/Kilobyte – chris 2017-12-23 03:11:40

2

使用top -d 1 -n 1的Android Shell命令來獲取利用進程名稱的所有進程列表或使用的內存的進程,然後提取您的進程信息從返回的字符串從系統:

BufferedReader in = null; 

     try { 
      Process process = null; 
      process = Runtime.getRuntime().exec("top -n 1 -d 1"); 

      in = new BufferedReader(new 
      InputStreamReader(process.getInputStream())); 

      String line =""; 
      String content = ""; 

      while((line = in.readLine()) != null) { 
       content += line + "\n"; 
      } 
      System.out.println(content); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     finally { 
      if(in != null) { 
       try { 
        in.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 


你會得到字符串爲:

PID PPID USER STAT VSZ %MEM %CPU COMMAND 
9673 9672 root R 712 0.1 0.0 top -d 1 -n 1 
2489 2386 system S 369m 87.7 0.0 system_server 
3101 2386 app_23 S 304m 72.3 0.0 com.android.browser 
2581 2386 radio S 279m 66.3 0.0 com.android.phone 
2585 2386 app_15 S 271m 64.4 0.0 com.android.launcher 
+0

我不明白你作爲預期輸出顯示的%mem數字。 – user1445716 2012-07-09 08:07:58

+0

@ user1445716:%MEM表示進程使用的內存,例如當前使用72.3內存和當前使用的com.android.launcher的「com.android.browser」目前使用64.4 – 2012-07-09 08:11:34

+0

@ user1445716:但我不確定87.7,72.3值的%或任何其他格式,所以我認爲你可以谷歌 – 2012-07-09 08:13:12

相關問題