フラストレーションポスト....android CountDownTimer - 最後のonTickが呼び出されていない - 使用するクリーンなソリューションは何ですか?
私はちょうど「CountDownTimer - last onTick not called」という問題に遭遇しました。
問題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出力を示す
簡単なデモ...
あなたはonTickは1963ms millisUntilFinishedで起こっている最後の呼び出しを見ることができるように、その後、次のコールは約2秒後にonFinishedになります。確かにバグの行動。私はまだ多くの記事を見つけましたが、まだ清潔な解決策はありません。 1つはソースコードに含まれていますが、iDontWantThisフィールドを100に設定した場合は動作します。
私は軽微なフィールドで回避策を気にかけませんが、このようなコア機能はまだわかりません。これに対してクリーンな解決策を得るために人々は何をしていますか?
どうもありがとう
マーティン
UPDATE:
、内部ミリ秒の遅延に最後のダニをsurpressesとも蓄積を防ぐことはありませんサムによってCountDownTimerの非常に便利な修正時間の経過と共に各ティックのミリ秒の遅延が見つかりますhere
アンドロイドとは全く新しいどうもありがとう、と私はhaventは、ステップが実際にそのような場合には、そのソースコードに見えるように作られました。私にそのステップを指摘してくれてありがとう。私はmillisUntilFinished> 0ならonTickを呼び出し、残ったmillisは自分がやりたいことが許せば簡単にチェックできます(実際には6,5,4,3,2を表示するカウントダウンタイマーが必要です)。 、1,0) – dorjeduck
完全性のためだけにブロックにmillisが残っているときにonTickが呼び出されるようにするには、次のようにelseを削除してください------------------- -------------------------------------------} else if(millisLeft
dorjeduck