zoukankan      html  css  js  c++  java
  • android应用流量信息提取

    Linux 系统下所有的信息都是以文件的形式存在的,所以应用程序的流量信息也会被保存在操作系统的文件中。Android 2.2 版本以前的系统的流量信息都存放在 proc/net/dev(或者 proc/self/net/dev)文件下,读取文件然后对其进行解析就行了。读取某一个应用的流量,则读取proc/uid_stat/uid /tcp_rcv 文件进行解析(注:模拟器下不存在这个目录)。
     
    如需查看某个应用的流量信息,可以通过以下命令来实现:
        adb devices                         列出所有设备
        adb -s 设备名称 shell                进入对应的设备
        cd proc                             进入设备的属性目录
        cd uid_stat                         进入 user id 状态目录,每个应用程序在安装的时候系统会为每个应用分配一个对应的 uid
        ls                                  列出 uid_stat 目录下所有应用对应的 user id 目录
        cd uid                              进入对应应用的 uid 目录
        ls                                  查看对应 uid 目录下的 tcp_rcv 和 tcp_snd 目录
        cat tcp_rcv                         查看该应用接收的数据信息
        cat tcp_snd                         查看该应用发送的数据信息
     
    这里需要注意的是不同语言编写的应用程序对应的的 uid 命名规则是不同的,如果是 Java 编写的应用程序,它的 uid 是从 10000 开始的,如果是 C 语言编写的,它的 uid 是从 1000 开始的。另外,uid 一旦被分配,是不会改变的。
    从下图中我们可以看到类似 app_0、app_1、app_3、app_4 的信息,这些信息也代表了 uid,也就是说 app_0 等同于 10000,app_1 等同于 10001,事实上“app_”后面的信息代表这个应用的安装序号,表示这个应用是第几个被安装到系统的。
     
     
     
     
     

    Android 2.2 版本中加入了 TrafficStats 类来实现对流量统计的操作,其实 TrafficStats 类自身也是依靠读取 Linux 下保存流量信息的文件并进行解析来实现的。android.net.TrafficStats 类中提供了多种静态方法,可以直接调用获取,返回类型均为 long 型,如果返回值等于 -1 代表 UNSUPPORTED,表示当前设备不支持统计,这里需要注意的是,通过 TrafficStats 获取的数据在手机重启的时候会被清空,所以,如果要对流量进行持续的统计需要将数据保存到数据库中,在手机重启时将数据读出进行累加即可。TrafficStats 类的静态方法如下:
    package cn.sunzn.trafficmanger;
    import android.app.Activity;
    import android.net.TrafficStats;
    import android.os.Bundle;
    import android.view.Menu;
    public class MainActivity extends Activity {
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           /** 获取手机通过 2G/3G 接收的字节流量总数 */
           TrafficStats.getMobileRxBytes();
           /** 获取手机通过 2G/3G 接收的数据包总数 */
           TrafficStats.getMobileRxPackets();
           /** 获取手机通过 2G/3G 发出的字节流量总数 */
           TrafficStats.getMobileTxBytes();
           /** 获取手机通过 2G/3G 发出的数据包总数 */
           TrafficStats.getMobileTxPackets();
           /** 获取手机通过所有网络方式接收的字节流量总数(包括 wifi) */
           TrafficStats.getTotalRxBytes();
           /** 获取手机通过所有网络方式接收的数据包总数(包括 wifi) */
           TrafficStats.getTotalRxPackets();
           /** 获取手机通过所有网络方式发送的字节流量总数(包括 wifi) */
           TrafficStats.getTotalTxBytes();
           /** 获取手机通过所有网络方式发送的数据包总数(包括 wifi) */
           TrafficStats.getTotalTxPackets();
           /** 获取手机指定 UID 对应的应程序用通过所有网络方式接收的字节流量总数(包括 wifi) */
           TrafficStats.getUidRxBytes(uid);
           /** 获取手机指定 UID 对应的应用程序通过所有网络方式发送的字节流量总数(包括 wifi) */
           TrafficStats.getUidTxBytes(uid);
       }
       public boolean onCreateOptionsMenu(Menu menu) {
           getMenuInflater().inflate(R.menu.activity_main, menu);
           return true;
       }
    }

     

  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/ccxniit2004/p/3622076.html
Copyright © 2011-2022 走看看