当前位置:   article > 正文

android流量统计_安卓流量统计时间轴

安卓流量统计时间轴

原始想法是按一个键,就进行一次页面跳转,之后开始统计流量次数,单位进行变化。

后面懒了直接打开app就能进行统计了,使用了TrafficStats的getTotalTxBytes()这个方法来获得打开app的总流量,app在后台运行时,自动计算,累加显示到TextView中。

关键是UI的更新,新建一个TimerTask,调用Timer的循环方法,定时获得流量数据,但是因为需要判断更新TextView,所以不能够在主线程启动一个UI线程,而数据又需要在UI线程中处理,果断写了一个MyHandler继承了Handler来进行消息处理。


线程更新:

  1. private void initTimerTask() {
  2. timerTask = new TimerTask() {
  3. @Override
  4. public void run() {
  5. // 获取现在最新的数据流量大小
  6. current_data = TrafficStats.getTotalTxBytes();
  7. double tp = current_data - start_data;
  8. // 除以次数,看单位转换
  9. int count = 0;
  10. // Log.v("data", "showDate :" + String.valueOf(tp));
  11. while (tp > 1024) {
  12. tp /= 1024;
  13. count++;
  14. if (count > 3)
  15. break;
  16. }
  17. // 不同的时候进行更新
  18. if (showData != tp) {
  19. showData = tp;
  20. // 新建一个message传递信息
  21. Message msg = new Message();
  22. msg.what = count;
  23. Bundle bundle = new Bundle();
  24. bundle.putDouble("showData", showData);
  25. msg.setData(bundle);
  26. updateUIHandler.sendMessage(msg);
  27. }
  28. Log.v("data", "count :" + count);
  29. Log.v("data",
  30. "currentData :"
  31. + String.valueOf(TrafficStats.getTotalTxBytes()));
  32. Log.v("data", "startData :" + start_data);
  33. }
  34. };
  35. }
消息发送:

  1. private void toggleTimer(boolean b) {
  2. if(b == false){
  3. timer.cancel();
  4. timerTask.cancel();
  5. }else{
  6. updateUIHandler = new MyHandler(MainActivity.this.textView);
  7. this.initTimerTask();
  8. timer = new Timer();
  9. timer.schedule(timerTask, 0, 5000);
  10. }
  11. }


处理的Handler类

  1. package com.example.datastatisctest;
  2. import java.text.DecimalFormat;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.util.Log;
  6. import android.widget.TextView;
  7. public class MyHandler extends Handler {
  8. TextView updateTextView;
  9. public MyHandler(TextView updateTextView) {
  10. this.updateTextView = updateTextView;
  11. }
  12. @Override
  13. public void handleMessage(Message msg) {
  14. super.handleMessage(msg);
  15. // 获得精确的值
  16. double accurate = msg.getData().getDouble("showData");
  17. // 设置double数值的精度
  18. DecimalFormat dcmFmt = new DecimalFormat("0.0");
  19. double showData = Double.valueOf(dcmFmt.format(accurate));
  20. // 进制转换
  21. switch (msg.what) {
  22. case 0:
  23. Log.i("data", showData + "B");
  24. updateTextView.setText(showData + "B");
  25. break;
  26. case 1:
  27. Log.i("data", showData + "KB");
  28. updateTextView.setText(showData + "KB");
  29. break;
  30. case 2:
  31. Log.i("data", showData + "MB");
  32. updateTextView.setText(showData + "MB");
  33. break;
  34. case 3:
  35. Log.i("data", showData + "GB");
  36. updateTextView.setText(showData + "GB");
  37. break;
  38. default:
  39. break;
  40. }
  41. }
  42. }


大概就是这样了,需要的朋友可以下载源码自己测试下吧,原理很简单。
点击打开链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/300914
推荐阅读
相关标签
  

闽ICP备14008679号