bài đăng thất vọng ....android CountDownTimer - last onTick không được gọi - giải pháp sạch sẽ để sử dụng?
Tôi vừa vấp vào "CountDownTimer - last onTick không được gọi là" nhiều sự cố đã được báo cáo tại đây.
bản demo đơn giản cho thấy vấn đề
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);
}
}
}
Các logcat đầu ra từ một thử nghiệm chạy ...
Như bạn có thể thấy các cuộc gọi cuối cùng onTick đang xảy ra với 1963ms millisUntilFinished, sau đó cuộc gọi tiếp theo là onFinished gần 2 giây sau đó. Chắc chắn là một hành vi lỗi. Tôi đã tìm thấy nhiều bài viết về điều này nhưng chưa có giải pháp sạch. Một trong những tôi bao gồm trong mã nguồn, nếu bạn thiết lập trường iDontWantThis đến 100 nó hoạt động.
Tôi không nhớ cách giải quyết trong các lĩnh vực nhỏ nhưng điều này có vẻ như một chức năng cốt lõi mà tôi không thể hiểu được nó vẫn chưa được khắc phục. Bạn đang làm gì để có một giải pháp sạch cho việc này?
Thanks a lot
martin
UPDATE:
Một sửa đổi rất hữu ích của CountDownTimer bởi Sam mà không surpresses tick trước do chậm trễ ms nội bộ và cũng ngăn ngừa sự tích tụ của sự chậm trễ ms với mỗi đánh dấu theo thời gian có thể được tìm thấy here
Cảm ơn rất nhiều, khá mới mẻ đối android và tôi havent đã bước để thực sự nhìn vào mã nguồn của nó trong những trường hợp như thế. Cảm ơn rất nhiều vì đã chỉ cho tôi bước đó. Tôi sẽ thực hiện CountDownTimer của riêng mình như được đề xuất luôn gọi onTick nếu millisUntilFinished> 0 và tôi có thể kiểm tra dễ dàng nếu số milli còn lại cho phép tôi muốn làm gì (thực ra tôi chỉ cần đồng hồ đếm ngược hiển thị 6,5,4,3,2 , 1,0) – dorjeduck
chỉ vì mục đích hoàn thành, xóa bỏ phần còn lại nếu khối lệnh thực hiện lệnh onTick được gọi bất cứ khi nào có millis còn lại ------------------- ---------------------------------------------} else if (millisLeft
dorjeduck