安卓倒数计时器取消VS timeup [英] android countdown timer cancel vs timeup

查看:180
本文介绍了安卓倒数计时器取消VS timeup的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是想知道,当超时发生时, onFinish()方法被调用,我们可以有进一步执行code。但由于某些原因,如果定时器手动或因故障不取消 onFinish()被调用?或者,它只是取消计时器不调用任何方法。

下面是我的两个计数器。

C1的:

 类C1的扩展CountDownTimer {    公共C1的(长millisInFuture,长countDownInterval){
        超(mil​​lisInFuture,countDownInterval);
        // TODO自动生成构造函数存根
    }    @覆盖
    公共无效onFinish(){
        // TODO自动生成方法存根
        Log.d(TAG,定时器完成);
                    //添加2分钟到第二个定时器
    }    @覆盖
    公共无效onTick(长millisUntilFinished){
        // TODO自动生成方法存根
                    /
    }
}类C2的扩展CountDownTimer {    公共计数器2(长millisInFuture,长countDownInterval){
        超(mil​​lisInFuture,countDownInterval);
        // TODO自动生成构造函数存根
    }
    @覆盖
    公共无效onFinish(){
        // TODO自动生成方法存根
        Log.d(TAG,定时器2成品);
    }
    @覆盖
    公共无效onTick(长millisUntilFinished){
        // TODO自动生成方法存根
    }
}

我要2分钟,加入第二个定时器是其值小于加2分钟其现有否则它将继续它的定时器。


解决方案

OnFinish()将不会在定时器叫取消你必须重新启动它,你可以存储在共享preference时间值,当应用程序得到坠毁你有从节省的时间开始时间。

  CountDownTimer countDownTimerFixed =新CountDownTimer(时间,蜱){    @覆盖
    公共无效onTick(长millisUntilFinished){        RTShared prefUtils.saveString prefernce(RTShared prefUtils.KEY_DOWNLOAD_TIMER,millisUntilFinished +);    }    @覆盖
    公共无效onFinish(){
        // TODO自动生成方法存根        RTShared prefUtils.saveString prefernce(RTShared prefUtils.KEY_DOWNLOAD_TIMER,0 +);
        this.start();    }
};

如果定时器就会被取消,

<$p$p><$c$c>Timer=Long.parseLong(RTShared$p$pfUtils.fetchString$p$pfernce(RTShared$p$pfUtils.KEY_DOWNLOAD_TIMER,RTShared$p$pfUtils.DEFAULT_DOWNLOAD_TIMER));            countDownTimer =新CountDownTimer(定时器,蜱){                @覆盖
                公共无效onTick(长millisUntilFinished){                    RTShared prefUtils.saveString prefernce(
                            RTShared prefUtils.KEY_DOWNLOAD_TIMER,millisUntilFinished +);
                    Log.d(TAG,Normalcount:\\ t+ (Long.parseLong(RTShared$p$pfUtils.fetchString$p$pfernce(RTShared$p$pfUtils.KEY_DOWNLOAD_TIMER,RTShared$p$pfUtils.DEFAULT_DOWNLOAD_TIMER)))/ 1000);
                }                @覆盖
                公共无效onFinish(){
                    // TODO自动生成方法存根                    }
                    RTShared prefUtils.saveString prefernce(
                            RTShared prefUtils.KEY_DOWNLOAD_TIMER,0 +);                    countDownTimerFixed.start();                }};countDownTimer.start();

I am just wondering when timeout occurs, onFinish() method is called and we can execute further code there. But for some reason if timer is cancelled either manually or because of error does onFinish() get called? Or it just cancels the timer without calling any method.

Here are My two Counters.

Counter1:

    class Counter1 extends CountDownTimer {

    public Counter1(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub
        Log.d(TAG, " Timer1 Finished");
                    //Add 2min to second timer


    }

    @Override
    public void onTick(long millisUntilFinished) {
        // TODO Auto-generated method stub
                    /
    }
}

class Counter2 extends CountDownTimer {

    public Counter2(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void onFinish() {
        // TODO Auto-generated method stub
        Log.d(TAG, "Timer2 Finished");          
    }
    @Override
    public void onTick(long millisUntilFinished) {
        // TODO Auto-generated method stub
    }
}

I have to add 2 min to second timer is its values is less than add 2minutes to its existing else it will continue with its timer.

解决方案

OnFinish() will not called at timer cancel you have to start it again, You can store time value in shared preference when application get crashed you have start time from saved time.

like

CountDownTimer countDownTimerFixed = new CountDownTimer(Time, Tick) {

    @Override
    public void onTick(long millisUntilFinished) {

        RTSharedPrefUtils.saveStringPrefernce(RTSharedPrefUtils.KEY_DOWNLOAD_TIMER, millisUntilFinished+ "");

    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub

        RTSharedPrefUtils.saveStringPrefernce(RTSharedPrefUtils.KEY_DOWNLOAD_TIMER, 0 + "");
        this.start();

    }
};  

if timer is canceled,

Timer=Long.parseLong(RTSharedPrefUtils.fetchStringPrefernce(RTSharedPrefUtils.KEY_DOWNLOAD_TIMER,RTSharedPrefUtils.DEFAULT_DOWNLOAD_TIMER));

            countDownTimer = new CountDownTimer(Timer, Tick) {

                @Override
                public void onTick(long millisUntilFinished) {



                    RTSharedPrefUtils.saveStringPrefernce(
                            RTSharedPrefUtils.KEY_DOWNLOAD_TIMER,millisUntilFinished + "");
                    Log.d(TAG," Normalcount:\t"+ (Long.parseLong(RTSharedPrefUtils.fetchStringPrefernce(RTSharedPrefUtils.KEY_DOWNLOAD_TIMER,RTSharedPrefUtils.DEFAULT_DOWNLOAD_TIMER)))/ 1000);
                }

                @Override
                public void onFinish() {
                    // TODO Auto-generated method stub

                    }
                    RTSharedPrefUtils.saveStringPrefernce(
                            RTSharedPrefUtils.KEY_DOWNLOAD_TIMER, 0 + "");

                    countDownTimerFixed.start();

                }

};

countDownTimer.start(); 

这篇关于安卓倒数计时器取消VS timeup的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆