android超出安卓手机怎么显示流量使用情况流量指的是什么?

为什么 iPhone 上的「数据流量」叫做「蜂窝数据」?和 4G 有什么区别?不少使用过 Android 手机的用户首次使用 iPhone 时,大概都会奇怪为什么移动网络在 Android 设备上成为「数据流量」,而在 iPhone 上叫做蜂窝移动数据呢?蜂窝网络和流量数据的区别是什么?其实是「蜂窝网络」和「数据流量」都是同一种移动通信硬件架构,只不过称呼方式不同。移动通信将移动电话的服务区划分为正六边形区域,每个区域设立一个基站,形成了形状酷似「蜂窝」的结构,采用蜂窝无线组网的方式,在终端和网络设备键通过无线通道连接,进而实现用户相互通信。蜂窝网络由移动站(手机等终端设备)、基站子系统(基站铁塔、光纤网络等)、网络子系统组成。蜂窝移动通信业务是指经过基站子系统和移动交换子系统等设备组成的蜂窝移动通信网络中提供的语音、数据、视频图像等业务,蜂窝移动数据即为蜂窝移动通讯中产生数据,也就是通常所说的「数据流量」。所以,苹果在 iPhone 上使用「蜂窝移动数据」其实是更为准确的名称。前往「设置」-「蜂窝移动网络」中,开启「蜂窝移动数据」即可使用流量上网。蜂窝移动数据和 4G 网络有什么关系?4G 网络是一种蜂窝移动网络,蜂窝式移动通信网络一般就是代指采用蜂窝组网结构的公众移动通信网络,从俗称的 1G 到现在的 4G 网络都可以成为蜂窝式移动网络通信网络。但现实生活中由于地形、用户分布、基站规划及各代技术更新迭代,如今使用的 2G、3G、4G 已经不能称之为严格意义上的「蜂窝」式网络,但为了纪念,一直沿用蜂窝网络的名称称呼公众移动通信网络。以上是红岸谷通讯分享发布于 2021-04-05 08:53
流量是指连接网络的设备在网络上所产生的数据流量。一般分为应用运行期间网卡的下行和上行流量获取流量方法:1、流量统计文件:读取读取/proc/net/dev文件其中 lo 为本地流量, rmnet0为移动流量, wlan0为无线流量另外网络上还有其他两种本地读取流量的方式(1)在/sys/class/net/下可以找到相关类别(如rmnet0)的目录.在其子目录statistics下rxbytes和txbytes记录收发流量.(2)在/proc/uid_stat/{uid}/tcp_rcv记录该uid应用下载流量字节,/proc/uid_stat/{uid}/tcp_snd有该uid应用上传流量字节但是我的华为手机(1)方式下没有权限,(2)方式下没有uid_stat目录2、Android流量统计API:static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFistatic 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的发送字节数3、通过抓包方式 (不做介绍,网上教程的很多)PerfDog与SoloPi测试结果对比:下载速率差不多,都在400KB左右(但是SoloPi统计的累计应用上/下 行文件里面显示流量都为0,不知道为什么)SoloPi源码分析以累计全局下行流量为例:RecordPattern pattern = new RecordPattern("累计全局下行流量", "KB", "Network");
pattern.setEndTime(endTime);
pattern.setStartTime(startTime);
result.put(pattern, downloadRecordAll);
数据存储在downloadRecordAll,downloadRecordAll通过getRxAll获取downloadRecordAll.add(new RecordPattern.RecordItem(System.currentTimeMillis(), getRxAll(), ""));
getRxAll 通过 TrafficStats.getTotalRxBytes()获取总的接受字节数public static float getRxAll()
{
long currentRx = TrafficStats.getTotalRxBytes();
if (triggerReload) {
startRx = currentRx;
triggerReload = false;
}
if(startRx == 0) {
startRx = currentRx;
}
long speed = currentRx - startRx;
return speed / 1024F;
}
累计应用下行流量为例:pattern = new RecordPattern("累计应用下行流量", "KB", "Network");
pattern.setEndTime(endTime);
pattern.setStartTime(startTime);
result.put(pattern, downloadAppRecordAll);
流量数据results[1]保存在downloadAppRecordAll 中,results通过getAppResult获取float[] results = getAppResult(uid);
downloadAppRecordAll.add(new RecordPattern.RecordItem(System.currentTimeMillis(), results[1], ""));
public static float[] getAppResult(int uid) {
String[] cmds;
/**
* /proc/net/xt_qtaguid/stats 记录各应用网络自开机使用情况
* 每一行数据:
* 26 wlan0 0x0 10039 0 10143 20 3061 27 10143 20 0 0 0 0 3061 27 0 0 0 0
* 第一列为UID,第6和8列为 rx_bytes(接收数据)和tx_bytes(传输数据)
*/
cmds = CmdTools.execAdbCmd("cat /proc/net/xt_qtaguid/stats
grep " + uid, 0).split("\n");
Long currentTime = System.currentTimeMillis();
Long rxTotal = 0L;
Long txTotal = 0L;
for (String cmd: cmds) {
String[] data = cmd.trim().split("\\s+");
if (data.length > 8) {
rxTotal += Long.parseLong(data[5]);
txTotal += Long.parseLong(data[7]);
}
}
LogUtil.i(TAG, "get Total Rx: " + rxTotal + "
get Total Tx: " + txTotal);
float rxSpeed = (rxTotal - lastAppRx) * KB_MILLION_SECOND / (currentTime - lastAppTime);
if (rxSpeed >= 0) {
lastAppRx = rxTotal;
} else {
rxSpeed = 0F;
}
float txSpeed = (txTotal - lastAppTx) * KB_MILLION_SECOND / (currentTime - lastAppTime);
if (txSpeed >= 0) {
lastAppTx = txTotal;
} else {
txSpeed = 0F;
}
lastAppTime = currentTime;
LogUtil.d(TAG, "加载Rx: %f, Tx: %f", rxSpeed, txSpeed);
if (startAppRx == 0
startAppTx == 0) {
startAppRx = lastAppRx;
startAppTx = lastAppTx;
}
if (triggerReload) {
startAppRx = lastAppRx;
startAppTx = lastAppTx;
triggerReload = false;
}
return new float[]{rxSpeed, (lastAppRx - startAppRx) / 1024F, txSpeed, (lastAppTx - startAppTx) / 1024F};
}
查了一下我的华为手机 /proc/net/xt_qtaguid/stats ,发现没有这个目录,怪不得没有app的流量数据

我要回帖

更多关于 安卓手机怎么显示流量使用情况 的文章

 

随机推荐