android流量统计

public class MainApplication extends Application{

  int uid = -1;
  long begin_rx = 0;
  long begin_tx = 0;

  @Override
  public void onCreate() {
    super.onCreate();
    uid = this.getUid();
    Log.i("MainApplication","当前进程的名字:"+getCurProcessName(this));
    Log.i("MainApplication","onCreate:");
    Log.i("MainApplication","uid:"+uid);
    begin_rx = TrafficStats.getUidRxBytes(uid);//获取接收到的数据
    begin_tx = TrafficStats.getUidTxBytes(uid);//获取发送的数据
    Log.i("MainApplication","开始时 接收数据:"+ Formatter.formatFileSize(this,begin_rx));
    Log.i("MainApplication","开始时 发送数据:"+ Formatter.formatFileSize(this,begin_tx));
  }

  //获取活动进程的名字
  private String getCurProcessName(Context context) {
    int pid = android.os.Process.myPid();
    ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
      if (appProcess.pid == pid) {
        return appProcess.processName;
      }
    }
    return "";
  }


  //获取uid
  public int getUid() {
    try {
      PackageManager pm = this.getPackageManager();
      ApplicationInfo ai = pm.getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA);
      return ai.uid;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return -1;
  }

  @Override
  public void onLowMemory() {
    Log.i("MainApplication","onLowMemory");
    super.onLowMemory();
  }

  @Override
  public void onTrimMemory(int level) {//系统回收内存时执行

    long rx = TrafficStats.getUidRxBytes(uid);
    long tx = TrafficStats.getUidTxBytes(uid);
    Log.i("MainApplication","onTrimMemory");
    Log.i("MainApplication","app一共接收数据:"+Formatter.formatFileSize(this,rx-begin_rx));
    Log.i("MainApplication","app一共发送数据:"+Formatter.formatFileSize(this,tx-begin_tx));
    super.onTrimMemory(level);
  }

  @Override
  public void onTerminate() {//退出时执行 不保证一定执行
    super.onTerminate();
    long rx = TrafficStats.getUidRxBytes(uid);
    long tx = TrafficStats.getUidTxBytes(uid);
    Log.i("MainApplication","onTerminate");
    Log.i("MainApplication","结束时 接收数据:"+Formatter.formatFileSize(this,rx));
    Log.i("MainApplication","结束时 发送数据:"+Formatter.formatFileSize(this,tx));
  }
}
如图:


如果有独立的进程,那么application increase方法会多次调用。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值