Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:我的应用程序使用了多少内存?_Android_Memory Management_Heap Memory - Fatal编程技术网

Android 安卓:我的应用程序使用了多少内存?

Android 安卓:我的应用程序使用了多少内存?,android,memory-management,heap-memory,Android,Memory Management,Heap Memory,记忆似乎是个大话题,我找不到具体的答案。 我已经得到了堆中有多少可用的答案,我知道应该使用多少。我需要的答案是如何编码,以编程方式确定有多少内存是我的应用程序使用的堆?我使用的总内存是多少?使用top-d1-n1Android Shell命令获取所有进程列表以及进程名称或进程使用的内存,然后从系统的返回字符串中提取进程信息: BufferedReader in = null; try { Process process = null;

记忆似乎是个大话题,我找不到具体的答案。
我已经得到了堆中有多少可用的答案,我知道应该使用多少。我需要的答案是如何编码,以编程方式确定有多少内存是我的应用程序使用的堆?我使用的总内存是多少?

使用
top-d1-n1
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
这项工作:

  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);

看一看,我不明白您作为预期输出显示的%mem数字是多少。@user1445716:%mem表示进程使用的内存,例如
com.android.browser
当前使用72.3内存,com.android.launcher当前使用64。4@user1445716:但我不确定87.7,72.3%或任何其他格式的值,所以我认为您谷歌能做到吗?但72.3%+87.7%大于100%。。。这就是我不理解的价值的含义。我想我正在寻找应用程序当前在堆上使用的内容。我知道堆上有什么可用的,我知道我应该使用什么,缺少的部分是我当前在堆上使用的东西?为什么要除以1024?根据Android文档,结果是kB(1000的倍数),而不是kB或KIB。