[转载]利用反射动态改变android倒计时类CountDownTimer的回调频率 – 叶秀标 – 博客园
- Android
- 2013-01-03
- 75热度
- 0评论
[转载]利用反射动态改变android倒计时类CountDownTimer的回调频率 - 叶秀标 - 博客园.




[java]
//3分钟后到时,每1秒回调一次onTick()
new CountDownTimer(3 * 60 * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
//在这里改变界面上的时间
}
@Override
public void onFinish() {
//在这里处理时间到了的逻辑
}
}.start();
[/java]
public CountDownTimer(long millisInFuture, long countDownInterval)
[java]
privatevoid changeCountdownInterval(long time) {
try {
// 反射父类CountDownTimer的mCountdownInterval字段,动态改变回调频率
Class clazz = Class.forName("android.os.CountDownTimer");
Field field = clazz.getDeclaredField("mCountdownInterval");
field.setAccessible(true);
field.set(this, time);
} catch (Exception e) {
Log.e("Ye", "反射类android.os.CountDownTimer失败: " + e);
}
}
[/java]
总结,用方案3的反射实现起来很灵活而且简单,不好的地方是,反射一般尽量少用,因为既然源码将mCountdownInterval定义为私有,而且不暴露修改他的值的方法,就一定有他的原因,以后源码可能会修改私有字段和私有方法,造成反射失效。不过在这里实现方法比较简单灵活,权衡了一下,还是可以使用,最后附上demo ^_^。
http://files.cnblogs.com/yexiubiao/YeCountDownTimer.rar