Android如何定时向服务器发送请求

前言

项目中有需求就是没过一断时间去向服务器发送请求然后去刷新UI其实思路还是比较多的但是我还是选择了CounterDownTimer方法 。

CounterDownTimer

话说其实用法很简单就是通过一个onTick方法来实现定时执行。但是怎么去实现了,对就是为什么。没看源码之前我猜它的大概思路是:

  1. 获取系统时间用来判断
  2. 通过handler机制切换线程
  3. 一些具体完成开始的操作
    于是乎我决定从CounterDownTimer入手简单一看他重写两个方法以及一个构造方法:
onTick
onfinsh

点击CounterDownTimer一看

  public synchronized final void cancel() {
        mCancelled = true;
        mHandler.removeMessages(MSG);
    }

可见handler猜测是对的我们取消发送时它内部是直接移除的
其实到这一目了然我们看看我们调用start()时他做了什么:

   public synchronized final CountDownTimer start() {
        mCancelled = false;
        if (mMillisInFuture <= 0) {
            onFinish();
            return this;
        }
        mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture;
        mHandler.sendMessage(mHandler.obtainMessage(MSG));
        return this;
    }

也就是判断是否完成你发送的时间是否完成如果没完成的话通过mHandler 继续发送消息同时获取一下系统消息来判断一下。
那他是怎么延迟的呢?
当然是调用 sendMessageDelayed(obtainMessage(MSG), delay);来设置每隔多少秒发送。到这也没啥了。用法更简单:

  //博客列表刷新
    class CountTimer extends CountDownTimer {

        public CountTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {
            //设置间隔时间进行的请求
        }
        @Override
        public void onFinish() {
        }
    }

调用时:

    if (timer==null){
            timer=new CountTimer(86400000,600000);
        }
        timer.start();

记得销毁时:取消一下请求

   if(timer!=null){
            timer.cancel();
        }

猜你喜欢

转载自blog.csdn.net/qiaoshi96_bk/article/details/80349560