【问题标题】:Find how much network traffic other Android apps generate查看其他 Android 应用程序产生了多少网络流量
【发布时间】:2011-03-16 15:56:29
【问题描述】:

我正在尝试制作一个后台服务,该服务应该测量各种应用程序的流量使用情况,以便能够向用户显示哪些应用程序消耗了最多的数据流量。

我发现 Spare Parts 应用程序确实可以做到这一点,但在 1.6 Dell Streak 设备上安装它后,“网络使用情况”总是显示“没有可用的电池使用数据”。这个功能在备件中是否有效? 另外,我找不到 Spare Parts 的有效源代码。

https://android.googlesource.com/platform/development/+/froyo-release/apps/SpareParts
看起来已经过时或不完整。 (?)

但备件似乎可以衡量,例如每个应用程序的 CPU 使用率。它是如何在无根手机上做到这一点的?

我对如何衡量每个应用的流量的总体想法是定期检查

"sys/class/net/" + sWiFiInterface + "/statistics/rx_bytes"

"sys/class/net/" + sWiFiInterface + "/statistics/tx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/rx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/tx_bytes"

文件并查看当前哪个应用程序具有焦点,因此最有可能导致生成的网络流量。

很遗憾,我找不到如何让应用当前获得焦点。

我发现了这个:

Android, how to get information on which activity is currently showing (in foregorund)?

但它似乎是关于测试,而不仅仅是在非 root 的 Android 设备上运行的 3d 派对服务。

我们可以使用ActivityManager.getCurrentTasks() 获取正在运行的活动,但其中任何一个都可以成为焦点。出于安全考虑,Android 架构师似乎明确不希望 3d 派对应用知道哪个应用具有焦点

(请参阅http://android.bigresource.com/Track/android-zb2mhvZX4/)。

有没有办法解决这个问题?

此外,如果我不仅想检测哪些活动占用了流量,还想检测哪些服务,我可以获取所有当前正在运行的服务 ActivityManager.getCurrentSerives() 甚至可以查看每个是否处于前台模式(如果 Android 需要资源,则不会被抛出)。但这又没有让我走得更远。

有什么想法吗?

【问题讨论】:

    标签: android android-activity focus traffic measure


    【解决方案1】:

    您可以通过ActivityManager.getRunningAppProcesses 调用来检测当前的前台应用程序。它将返回RunningAppProcessInfo 记录列表。要确定哪个应用程序在前台,请检查RunningAppProcessInfo.importance 字段是否与RunningAppProcessInfo.IMPORTANCE_FOREGROUND 相等。

    但请注意,对 ActivityManager.getRunningAppProcesses() 方法的调用必须不在 UI 线程中执行。只需在后台线程中调用它(例如通过 AsyncTask),它就会返回正确的结果。更多详情请查看my post

    【讨论】:

    • 非常感谢您的回复!我想这解决了我的大部分问题。我刚刚找到了 NetSentry 应用程序(source code),它甚至可以在没有后台服务运行的情况下进行流量测量。现在试图弄清楚我是否可以这样做,并尝试将流量归因于前台的活动。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2011-09-29
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多