文档章节

android App流量统计

chenbilly
 chenbilly
发布于 2013/10/14 11:00
字数 754
阅读 3933
收藏 8

原文地址:http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html ###android流量简介

  • 流量统计文件:路径/proc/net/dev

打开文件,其中 lo 为本地流量, rmnet0 为3g/2g流量, wlan0 为无线流量.

  • /sys/class/net/ 下 可以找到相关类别(如rmnet0)的目录.在其子目录statistics下游rx_bytes和tx_bytes记录收发流量.

  • /proc/uid_stat/{uid}/tcp_rcv 记录该uid应用下载流量字节,/proc/uid_stat/{uid}/tcp_snd有该uid应用上传流量字节

###TrafficStats学习

static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFi static long getMobileRxPackets() //获取Mobile连接收到的数据包总数 static long getMobileTxBytes() //Mobile发送的总字节数 static long getMobileTxPackets() //Mobile发送的总数据包数 static long getTotalRxBytes() //获取总的接受字节数,包含Mobile和WiFi等 static long getTotalRxPackets() //总的接受数据包数,包含Mobile和WiFi等 static long getTotalTxBytes() //总的发送字节数,包含Mobile和WiFi等 static long getTotalTxPackets() //发送的总数据包数,包含Mobile和WiFi等 static long getUidRxBytes(int uid) //获取某个网络UID的接受字节数 static long getUidTxBytes(int uid) //获取某个网络UID的发送字节数

备注:TrafficStats类在Android 2.2 API Level(8)之后出现。

###设计一个合理的APP流量统计

  • 记录某App开关机流量使用

因为getUidRxBytes(int uid)getUidTxbytes(int uid)记录的是 该uid应用 在手机启动到你使用这个方法时的流量统计.故需要在手机关机时记录你这个程序在这次开关机过程中的使用流量记录.

public class ShutDownReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //在关机时 记录uid应用 本次流量结余 } }

  • 记录Wifi中的流量使用

因为getUidRxBytes(int uid)getUidTxbytes(int uid)包括了所有网络形式的流量,即包括WIFI和3g/2g.故需要监听WIFI变化,并记录WIFI过程中该uid应用使用的流量记录.

public class WifiStateReceiver extends BroadcastReceiver implements ISusoConstants { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); if (wifistate == WifiManager.WIFI_STATE_DISABLED) {//如果关闭 //结余本次wifi过程中 uid应用的 流量 } else if (wifistate == WifiManager.WIFI_STATE_ENABLED) { //记录当前uid应用的流量. } } } }

  • 使用每日闹铃统计/开机时判断昨日统计是否完成.

通过每日结余计算,得出该日APP的总流量以及WIFI流量占用和2g/3g的流量占用.

  • 获取流量代码 PackageManager pm = context.getPackageManager(); ApplicationInfo ai = pm.getApplicationInfo("com.51zaozao.traffic", PackageManager.GET_ACTIVITIES); long inTraffic = TrafficStats.getUidRxBytes(ai.uid); long outTraffic = TrafficStats.getUidTxBytes(ai.uid);

###拓展阅读

© 著作权归作者所有

chenbilly
粉丝 16
博文 9
码字总数 7714
作品 0
杭州
程序员
私信 提问
加载中

评论(4)

chenbilly
chenbilly 博主

引用来自“garybook”的评论

貌似getUidRxBytes(int uid)和 getUidTxbytes(int uid)无法统计该应用视频播放的流量
视频流 如果使用naive层的 播放器 代码. 应该是统计不到的.
garybook
garybook
貌似getUidRxBytes(int uid)和 getUidTxbytes(int uid)无法统计该应用视频播放的流量
c
closeyss
一个合理的App流量统计 ~\(≧▽≦)/~ 赞一个啦13
TiHou
TiHou
正在研究相关内容,顶顶更健康
安卓App流量统计

android app流量统计.(http://my.oschina.net/chenbilly/blog/168613) 本文讲述了关于android流量的简介,如何使用TrafficStats获取流量,并设计一个完整的APP流量统计,最后深入了解如何通过其...

chenbilly
2013/10/14
3K
1
Android性能测试工具-Emmagee 2.2双节版发布

Emmagee是网易杭州研究院QA团队开发的一款简单易上手的Android性能监控App,主要用于监控单个App的CPU、内存、流量、启动耗时、电量、电流等性能状态的变化,且用户可自定义配置监控的频率以...

AndrewLeo
2015/02/13
2K
5
android应用流量统计小谈

最近有一个项目需要对android设备上安装的应用进行流量统计,并且分离出每个应用通过wifi和手机网络分别用了多少流量。花了一些时间查阅资料和代码编写,终于完成了一个DEMO版本,最后做了一...

TiHou
2013/11/26
7.9K
9
Android基础性能数据获取(api或/proc/读取)

主要资料参考 Android系统源码在线查看网址 Linux平台Cpu使用率的计算 腾讯开源移动端性能测试APP:GT 3.1 内存篇 内存:表示当前进程内存的使用情况,内存占用过高可能会引起内存抖动,或O...

某杰
2018/05/07
0
0
Android性能专项测试之耗电量统计

电量统计(1)-原理- http://duanqz.github.io/2015-07-21-batterystats-part1 Android性能专项测试之耗电量统计API- https://blog.csdn.net/itfootball/article/details/49155979 -- Android......

desaco
02/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部