第一步

public class Net_Service extends Service {    private long total_data = TrafficStats.getTotalRxBytes();    private Handler mHandler;    //几秒刷新一次    private final int count = 5;    /**     * 定义线程周期性地获取网速     */    private Runnable mRunnable = new Runnable() {        @Override        public void run() {            //定时器            mHandler.postDelayed(mRunnable, count * 1000);            Message msg = mHandler.obtainMessage();            msg.what = 1;            msg.arg1 = getNetSpeed();            mHandler.sendMessage(msg);        }    };    @Override    public void onCreate() {        super.onCreate();        mHandler = new Handler(){            @Override            public void handleMessage(Message msg) {                super.handleMessage(msg);                if (msg.what == 1) {                    //float real_data = (float)msg.arg1;                    if(msg.arg1  > 1024 ){                        //System.out.println(msg.arg1 / 1024 + "kb/s");                        Intent intent  = new Intent();                        intent.setAction("com.weilian.fmscms.speed");                        intent.putExtra("speed",msg.arg1 / 1024 + "kb/s");                        sendBroadcast(intent);                    }                    else{                        //System.out.println(msg.arg1 + "b/s");                    }                }            }        };    }    /**     * 核心方法,得到当前网速     * @return     */    private int getNetSpeed() {        long traffic_data = TrafficStats.getTotalRxBytes() - total_data;        total_data = TrafficStats.getTotalRxBytes();        return (int)traffic_data /count ;    }    /**     * 启动服务时就开始启动线程获取网速     */    @Override    public void onStart(Intent intent, int startId) {        mHandler.postDelayed(mRunnable, 0);    };    /**     * 在服务结束时删除消息队列     */    @Override    public void onDestroy() {        mHandler.removeCallbacks(mRunnable);        super.onDestroy();    };    @Override    public IBinder onBind(Intent intent) {        return null;    }}

第二步

**

第三步

//实时监听网路变化情况        IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction("com.weilian.fmscms.speed");        broadcastReceiver = new BroadcastReceiver() {            @Override            public void onReceive(Context context, Intent intent) {                mTvSpeed.setText(intent.getStringExtra("speed"));            }        };        registerReceiver(broadcastReceiver,intentFilter);        startService(new Intent(ShowActivity.this,Net_Service.class));

参考自:http://www.mamicode.com/info-detail-225320.html

更多相关文章

  1. android Sqlite多线程访问异常解决方案
  2. android UI跨线程操作
  3. 在Android中实现多线程同步
  4. Android/java 多线程(五)-ThreadPoolExecutor线程池的使用
  5. Android 线程池来管理线程
  6. Android的线程使用来更新UI----Thread、Handler、Looper、TimerT
  7. Android关于线程更新UI的方法
  8. 解析Android中的main线程与子线程

随机推荐

  1. 自定义滚动条插件
  2. 如何为每个JQuery UI滑块句柄使用不同的
  3. 无法通过jquery Ajax在laravel 5中发布
  4. jQuery遍历Table tr td td中包含标签
  5. 使用jquery的$ .ajax来获取node.js脚本的
  6. jQuery捕获被点击元素的ID
  7. 日期排序问题
  8. jQuery的getJSON不支持REST端
  9. 十、jquery-ui datepicker实现选择一周的
  10. jquery手指触摸滑动放大图片的方法(比较