【问题标题】:How to get process memory consumption in Android如何在Android中获取进程内存消耗
【发布时间】:2013-02-26 00:27:48
【问题描述】:

我想知道应用程序 A 到应用程序 B 的内存消耗情况。我知道本网站上讨论的所有 techniques。但是,它们都不适合我。 我的场景是,我已经实现了一个代码,可以通过 top 命令监控任何特定应用程序的 CPU 消耗。但是,top 命令只提供 VSS 和 RSS,而我对 PSS 和 USS 感兴趣。获得这些值的一种方法是通过 procrank。但是,我不确定是否可以在智能手机上执行 procrank 命令,因为我尝试过process p2 = Runtime.getRuntime().exec("procrank");,但它不起作用。 (编辑:适用于 Android 模拟器(不是智能手机)。 有人可以指导我如何通过我已经通过 top 命令获取的应用程序 ID 或名称获取 PSS 和 USS。

【问题讨论】:

  • Google Android 团队的 Dianne Hackborn 很好地回答了这个问题here
  • 是的,我已经阅读了这篇文章并在我的帖子中提供了参考。我正在寻找一些可以使用 memeoryinfo() 或 procrank 在 android 上为我提供 PSS 和 USS 信息的代码。你能帮忙吗?
  • 您最好解释一下为什么要获取另一个应用程序的内存使用信息。我怀疑对于您的用例来说,有比您尝试做的任何事情更好的工具。
  • 实际上我正在创建一个分析器,它将监控应用程序的 CPU、内存、能源消耗并相应地执行一些操作。

标签: java android memory memory-management android-emulator


【解决方案1】:

我知道这个问题很老了,我会提出一些建议..

  • 首先在控制台获取root权限

    Process process = Runtime.getRuntime().exec("su"); 
    
  • 然后用root权限编写你的命令

    su <--command-->
    
  • 读取流输出

    try {
      Process process = Runtime.getRuntime().exec("su");         
      DataOutputStream dataOutputStream = 
                               new DataOutputStream(process.getOutputStream());
      if (dataOutputStream != null) {
          dataOutputStream.writeBytes("procrank\n");             
          dataOutputStream.flush();
          BufferedInputStream bufferedInputStream = 
                               new BufferedInputStream(process.getInputStream());
          byte[] bff = new byte[bufferedInputStream.available()];
          bufferedInputStream.read(bff);
      }
    } catch (Exception e) {
    }
    

请转至my answer for explanation

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多