Android定时向服务器发送请求

作者: i小灰 | 来源:发表于2020-10-20 10:48 被阅读0次

    前言

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

    CounterDownTimer 解析

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

    获取系统时间用来判断
    通过handler机制切换线程
    一些具体完成开始的操作
    于是乎我决定从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);来设置每隔多少秒发送。到这也没啥了。用法更简单,看下方使用方法:

    CountDownTimer 倒计时,可以在主线程使用。

    定义一个全局值

    private CountTimer timer=null;
    
        //定时列表刷新任务
        class CountTimer extends CountDownTimer {
    
            public CountTimer(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
            }
    
            @Override
            public void onTick(long millisUntilFinished) {
                //设置间隔时间进行的请求
                //getData();
            }
            @Override
            public void onFinish() {
            }
        }
    

    使用方法:

            //这里所有的参数都是毫秒,使用秒需要 time乘以1000
            //long millisInFuture 倒计时总时间
            //long countDownInterval 间隔多久倒计时一次
            //以下参数是 一共60秒,每10秒倒计时一次
        if (timer==null){
                timer=new CountTimer(60*1000,10*1000);
            }
            timer.start();
    
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            //销毁时关闭刷新
            if(timer!=null){
                timer.cancel();
            }
        }
    

    相关文章

      网友评论

        本文标题:Android定时向服务器发送请求

        本文链接:https://www.haomeiwen.com/subject/zwnrmktx.html