Android技术知识

Android 倒计时类的一些应用

2017-07-11  本文已影响0人  kolibreath

本次hackathon中使用了三个类处理倒计时的问题:
1.Timer/TimerTask
2.CountDownTimer

使用场景,因为Catpel需要在用户设置一个时间之后就算按下home也需要倒计时,所以使用了Service+Timer/TimerTask
核心代码如下:

  timer.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        COUNT_DOWN--;
                }, 1000, 1000);
        }

参数:
第一个1000 指的是延迟1000毫秒之后执行。
第二个1000 指的是每过1000毫秒执行一次。
和Serive结合:

class MyBinder extends Binder {

        public void setScheduel(boolean isSet) {
            if (isSet == true) {
               timer.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        COUNT_DOWN--;
                }, 1000, 1000);
        }
}

写一个公有方法在Binder中 在需要绑定的活动中
new一个ServiceConnection对象

 private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
         mybinder = (MyService.Mybinder)iBinder;
         myBinder.setScheduel();
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    } ;

在需要绑定地方绑定

bindService(intent, serviceConnection, BIND_AUTO_CREATE)

在需要的地方解绑服务就可以。后台倒计时就完成了。


使用CountdownTimer是因为它能够在回调函数中更新UI线程的ui

同时需要注意的是:CountDownTimer(long millisInFuture, long interval);
第一个参数是经过多长时间倒计时结束,第二个参数是间隔的时间.

private void initCountDownTimer(){
        CountDownTimer timer = new CountDownTimer(timeMillis*1000+2000,1000) {
            @Override
            public void onTick(long l) {
                toolbar.setTitle(timeMillis+"");
                setToolbar(SET_,timeMillis);
                timeMillis--;
            }

            @Override
            public void onFinish() {
                ViewGroup.LayoutParams params = toolbar.getLayoutParams();
                params.width = WindowManager.LayoutParams.MATCH_PARENT;
                toolbar.setLayoutParams(params);
                toolbar.setBackgroundColor(getResources().getColor(R.color.colorAccent));
            }
        };
        timer.start();
    }

SetToolbar()是自己写的一个方法。用于设置toolbar的title显示时间。

上一篇下一篇

猜你喜欢

热点阅读