稍微整理了下,直接上代码。

private long lastTotalRxBytes = 0; private long lastTimeStamp = 0; private int UPDATE = 100; private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            // TODO 接收消息并且去更新UI线程上的控件内容            if (msg.what == UPDATE) {                //tv.setText(String.valueOf(msg.obj));             Log.i(TAG, "网速为:"+msg.obj);            }            super.handleMessage(msg);        }    }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_net_speed); lastTotalRxBytes = getTotalRxBytes(); lastTimeStamp = System.currentTimeMillis(); Log.i(TAG, "lastTotalRxBytes:"+lastTotalRxBytes); Log.i(TAG, "lastTimeStamp:"+lastTimeStamp); TimerTask task = new TimerTask() { @Override public void run() { showNetSpeed(); } }; new Timer().schedule(task, 1000, 2000); // 1s后启动任务,每2s执行一次 } private void showNetSpeed() { long nowTotalRxBytes = getTotalRxBytes(); long nowTimeStamp = System.currentTimeMillis(); long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换 lastTimeStamp = nowTimeStamp; lastTotalRxBytes = nowTotalRxBytes; Message msg = mHandler.obtainMessage(); msg.what = UPDATE; if(speed == 0){ msg.obj = String.valueOf(speed) + ".00kb/s"; }else { msg.obj = String.valueOf(speed) + "kb/s"; } mHandler.sendMessage(msg);//更新界面 } private long getTotalRxBytes() { // return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB return TrafficStats.getTotalRxBytes()/1024;//转为KB }

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐