gpt4 book ai didi

android CountDownTimer - 最后一个 onTick 未调用 - 使用什么干净的解决方案?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:03:11 25 4
gpt4 key购买 nike

沮丧的帖子....

我刚刚无意中遇到许多人在这里报告的“CountDownTimer - 最后一个 onTick 未调用”问题。

显示问题的简单演示

package com.example.gosh;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;

public class CountDownTimerSucksActivity extends Activity {

int iDontWantThis = 0; // choose 100 and it works yet ...

private static final String TAG = "CountDownTimerSucksActivity";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

new MyCountDownTimer(10000 + iDontWantThis , 1000).start();
}

class MyCountDownTimer extends CountDownTimer {

long startSec;

public MyCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
// TODO Auto-generated constructor stub
startSec = System.currentTimeMillis() ;
}

@Override
public void onFinish() {
// TODO Auto-generated method stub
Log.e(TAG, " onFinish (" + getSeconds() + ")");
}

@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
Log.e(TAG, millisUntilFinished + " millisUntilFinished" + " (" + getSeconds() + ")");

}

protected long getSeconds() {
return (((System.currentTimeMillis() - startSec) / 1000) % 60);

}

}

}

测试运行的 logcat 输出 ...

logcat ouput

如您所见,最后一次调用 onTick 发生在 1963 毫秒 millisUntilFinished 时,然后下一次调用在将近 2 秒后 onFinished 发生。当然是错误的行为。我在这方面发现了很多帖子,但还没有干净的解决方案。我在源代码中包含一个,如果您将 iDontWantThis 字段设置为 100,它就可以工作。

我不介意在次要领域的解决方法,但这似乎是一个核心功能,我无法理解它尚未修复。你们正在做什么来为此找到一个干净的解决方案?

非常感谢

马丁

更新:

可以找到 Sam 对 CountDownTimer 的一个非常有用的修改,它不会由于内部 ms 延迟而抑制最后一个 tick,并且还可以防止每个 tick 随着时间的推移累积 ms 延迟 here

最佳答案

您正在经历的行为实际上是在 CountdownTimer 代码中明确定义的; have a look at the source .

注意 handleMessage() 内部,如果剩余时间小于间隔,它明确不会调用 onTick() 并且只是延迟直到完成。

但是请注意,从源代码来看,CountdownTimer 只是 Handler 的一个非常薄的包装器,它是 Android 框架的真正计时组件。作为解决方法,您可以非常轻松地从此源(少于 150 行)创建自己的计时器并删除此限制以获得最终的报价回调。

关于android CountDownTimer - 最后一个 onTick 未调用 - 使用什么干净的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12431180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com