赞
踩
原始想法是按一个键,就进行一次页面跳转,之后开始统计流量次数,单位进行变化。
后面懒了直接打开app就能进行统计了,使用了TrafficStats的getTotalTxBytes()这个方法来获得打开app的总流量,app在后台运行时,自动计算,累加显示到TextView中。
关键是UI的更新,新建一个TimerTask,调用Timer的循环方法,定时获得流量数据,但是因为需要判断更新TextView,所以不能够在主线程启动一个UI线程,而数据又需要在UI线程中处理,果断写了一个MyHandler继承了Handler来进行消息处理。
线程更新:
- private void initTimerTask() {
- timerTask = new TimerTask() {
-
- @Override
- public void run() {
- // 获取现在最新的数据流量大小
- current_data = TrafficStats.getTotalTxBytes();
-
- double tp = current_data - start_data;
- // 除以次数,看单位转换
- int count = 0;
-
- // Log.v("data", "showDate :" + String.valueOf(tp));
-
- while (tp > 1024) {
- tp /= 1024;
- count++;
- if (count > 3)
- break;
- }
-
- // 不同的时候进行更新
- if (showData != tp) {
-
- showData = tp;
- // 新建一个message传递信息
- Message msg = new Message();
- msg.what = count;
- Bundle bundle = new Bundle();
- bundle.putDouble("showData", showData);
- msg.setData(bundle);
- updateUIHandler.sendMessage(msg);
- }
-
- Log.v("data", "count :" + count);
-
- Log.v("data",
- "currentData :"
- + String.valueOf(TrafficStats.getTotalTxBytes()));
- Log.v("data", "startData :" + start_data);
- }
- };
- }
消息发送:
- private void toggleTimer(boolean b) {
- if(b == false){
- timer.cancel();
- timerTask.cancel();
- }else{
- updateUIHandler = new MyHandler(MainActivity.this.textView);
- this.initTimerTask();
- timer = new Timer();
- timer.schedule(timerTask, 0, 5000);
- }
- }
- package com.example.datastatisctest;
-
- import java.text.DecimalFormat;
-
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.widget.TextView;
-
- public class MyHandler extends Handler {
-
- TextView updateTextView;
-
- public MyHandler(TextView updateTextView) {
- this.updateTextView = updateTextView;
- }
-
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
-
- // 获得精确的值
- double accurate = msg.getData().getDouble("showData");
-
- // 设置double数值的精度
- DecimalFormat dcmFmt = new DecimalFormat("0.0");
- double showData = Double.valueOf(dcmFmt.format(accurate));
-
- // 进制转换
- switch (msg.what) {
- case 0:
- Log.i("data", showData + "B");
- updateTextView.setText(showData + "B");
- break;
- case 1:
- Log.i("data", showData + "KB");
- updateTextView.setText(showData + "KB");
- break;
- case 2:
- Log.i("data", showData + "MB");
- updateTextView.setText(showData + "MB");
- break;
- case 3:
- Log.i("data", showData + "GB");
- updateTextView.setText(showData + "GB");
- break;
- default:
- break;
- }
- }
-
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。