java - 如何在 Android 上通过应用程序确定资源分配

标签 java android memory battery proc

我正在尝试编写一个 Android 应用程序 (java),它可以执行诸如确定应用程序的电池使用情况、应用程序的 cpu 使用情况、应用程序的内存使用情况,以及诸如电池电量、cpu 电压、电池温度、cpu 等整体信息temp等。基本上是一堆统计数据,以后可能会用于分析。在了解了如何做到这一点之后,在我看来最好的办法就是使用/proc。具体来说,/proc/apm 用于电池,/proc/cpuinfo 用于 cpu 速度,/proc/meminfo 用于内存字段,而/proc/stat 用于 cpu 使用。要获取特定于应用程序的数据,您是否会在/proc 之后使用 PID,也许在一个循环中?例如伪代码,它会是这样的:

Get PIDs of all running processes
Run a loop that reads info from /proc/<PID>/apm and saves pertinent data to an array,  
        then iterates the PID
Run loops like the one above for cpuinfo, meminfo, and stat

我目前读取电池电量还不错,CPU 使用率花了我一段时间,但我想我也有。它的应用程序特定的东西让我陷入困境。对于我提到的任何统计数据,我是否需要 root 访问权限?

非常感谢!

最佳答案

使用 procrank 怎么样?我知道它不是/proc/"PID"/stat,但它没有提供您完成这项工作所需的一切吗?在第一列中,您将获得 PID,然后第 4/5 列分别是 PSS/USS。根据我对this link的理解通过执行以下操作,PSS 和 USS 可用于计算内存使用量:

PSS/[Σ(PSS)] -> 这是内存使用率 %

USS/[Σ(PSS)] -> 这是可以通过终止进程释放的内存百分比

关于java - 如何在 Android 上通过应用程序确定资源分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21173396/

相关文章:

java - 资源加载: How to determine if it's a directory

android - Context.startForegroundService() 仅在 Android 11 Samsung 设备上没有调用 Service.startForeground()

android - 有没有办法压缩android中的内存以降低高水位线?

mysql - 带有内存数据库的 Rails

java - 在Eclipse中运行Hadoop作业时,使用System.Out.Println在控制台上没有O/P

java - Java中如何解决字节填充问题?

android - 以编程方式设置自定义组件高度/宽度

android - Robolectric 3.0 测试 fragment

python - ipython 内核在 16gb 的 linux 盒子中最大容量为 3gb?

java - TreeSet 给出不正确的输出 - Java8