您的位置:首页 > 移动开发 > Android开发

Android的 CountDownTimer的使用

2016-05-30 22:06 471 查看
说道计时器,可能是因为从java出门的。所以一直使用的都是java的timer类以及配套的timertask类,今天逛逛博客,看到了
CountDownTimer
这个类,照例搜索了一番,然发现他是Android封装好的一个计时的类,既然人家都封好了,使用起来肯定比timer的使用还要简单。所以做了一个简单的demo。,发现特别简单,接下来上他的用法

    TextView textView;

    CountDownTimer countdowntimer;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    textView=(TextView) this.findViewById(R.id.textView1);

    countdowntimer=new CountDownTimer(10000,1000) {

        

        @Override

        public void onTick(long millisUntilFinished) {

textView.setText(millisUntilFinished+"");

            

        }

        

        @Override

        public void onFinish() {

textView.setText("finish");            

        }

    };

    countdowntimer.start();

    }

    

}

代码比较简单,其中的参数

第一个为总时间,比如3000,,

第二个 间隔时间,比如1000

然后开始看看源码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    public CountDownTimer(long millisInFuture, long countDownInterval) {

        mMillisInFuture = millisInFuture;

        mCountdownInterval = countDownInterval;

    }

这个就是构造方法了,比较简单,而且他也只有这个构造方法

    public synchronized final void cancel() {

        mCancelled = true;

        mHandler.removeMessages(MSG);

    }

然后再这个cancel类中可以看到他是通过handler去操作的,好吧,凡事离不开handler

    private Handler mHandler = new Handler() {

        @Override

        public void handleMessage(Message msg) {

            synchronized (CountDownTimer.this) {

                if (mCancelled) {

                    return;

                }

                final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();

                if (millisLeft <= 0) {

                    onFinish();

                } else if (millisLeft < mCountdownInterval) {

                    sendMessageDelayed(obtainMessage(MSG), millisLeft);

                } else {

                    long lastTickStart = SystemClock.elapsedRealtime();

                    onTick(millisLeft);

                    long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();

                    while (delay < 0) delay += mCountdownInterval;

                    sendMessageDelayed(obtainMessage(MSG), delay);

                }

            }

        }

    };

这个是handler里的操作,看得出来。

1。必须是锁定的,这样就不会照成混乱。

2.对long型数据的操作,然后就没没了,所以还是很简单的,

对了,最后提醒,要启动时既得是用start方法

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android