在Android中使用CountDownTimer时,OnCreate调用了两次
问题描述:
我试图用文本视图实现一个视图,每600毫秒计数一个数字,并在文本视图中动态显示数字。在Android中使用CountDownTimer时,OnCreate调用了两次
问题:活动按预期调用,但在倒计时期间,活动会再次创建,倒计时将从头开始。我的活动中的OnCreate()方法被调用两次,尽管它应该被调用一次。我知道可以通过改变屏幕方向和其他配置更改来触发它,但似乎并没有发生在这里。
的OnCreate()在我的活动:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.SqueezeLayout);
countdownTextView = (TextView)FindViewById(Resource.Id.countdown_text_view);
Timer myTimer = new Timer(18000, 600, this);
myTimer.Start();
}
我实现CountDownTimer的:
class Timer : CountDownTimer
{
public int count = 30;
SqueezeActivity squeezeActivity;
public Timer(long totaltime, long interval, SqueezeActivity activity)
: base(totaltime, interval)
{
squeezeActivity = activity;
}
public override void OnTick(long millisUntilFinished)
{
count--;
String countStr = count.ToString();
squeezeActivity.countdownTextView.Text = countStr;
}
public override void OnFinish()
{
squeezeActivity.StartActivity(typeof(AnotherActivity));
}
}
我在Xamarin开发初学者所以请原谅:)谢谢。
答
事实证明,调用两次的方法是由代码逻辑中的一个简单错误引起的 - 我曾经两次调用StartActivity。所以它与倒数计时器无关。感谢您的答案。 :)
看看这个,我认为你的问题可能与它有关:http://*.com/questions/3588682/is-it-normal-for-the-activity-oncreate-method-被称为多次 – Nestoraj
我不知道你是如何构建这个代码并运行它的,因为你没有实现CountDownTimer的OnFinish()方法。在重写CountDownTimer类时,需要实现OnTick()和OnFinish()。 – sJy
@Nestoraj,我读过那篇文章。他们建议延迟计时器运行的线程,但是我不能延迟,因为我正在实施一种节拍器,它必须是精确的。我试着在一个单独的线程中用下面的代码启动我的计时器:'System.Threading.Thread thread = new System.Threading.Thread(new ThreadStart(runner.StartTimer));'''thread.Start();'但结果是一样的。经过一些调试后,我发现在启动计时器后活动会重新创建。我没有在Android文档中找到任何有用的信息。我会继续寻找。 – user1743439