不幸的是我的架构不起作用所以我需要你的帮助。
我想解决的问题:
我编写了一个迷你游戏,您可以在其中选择“跑1分钟”等练习。
我尝试在实现CountDownTimer时解决问题。但是如果countDownTimer是片段的一部分,如果我离开片段,它将被销毁。当我回来时,倒计时器从一开始就开始......
所以我想到了一个线程...但是我怎么能在片段中显示倒计时以及我想要的任何地方?
这个线程一直活着直到他完成了吗?即使我关闭了应用程序?
所以你能说出一些我可以搜索解决问题的关键词。或者改为描述解决方案?
感谢您的建议;)
答案 0 :(得分:2)
你应该把你的计数器放在Service中,它将作为一个远程进程运行,并在需要显示计时器的任何地方绑定到该服务,然后使用观察者模式从你的服务调用一个监听器回调服务CountDownTimer's每当你想要更新观察者时,onTick方法:
mCountDownTimer = new CountDownTimer(startTime, 1000) {
//update after each tick
public void onTick(long millisUntilFinished) {
long seconds = (millisUntilFinished / 1000) % 60;
long minutes = ((millisUntilFinished / 1000) / 60) % 60;
long hours = (((millisUntilFinished / 1000) / 60) / 60) % 24;
long days = (((millisUntilFinished / 1000) / 60) / 60) / 24;
if(listeners!=null){
Log.d(TAG, "days:"+days + "hours:"+ hours + "minutes:"+ minutes + "seconds:"+ seconds);
listeners.onTimeChanged(days, hours, minutes, seconds);
}
}
public void onFinish() {
if(listeners!=null){
Log.d(TAG, "timer finished");
listeners.onTimerFinish();
}
}
}.start();
答案 1 :(得分:1)
我不会尝试进行实际的倒计时,因为当应用程序离开时你的线程应该会死掉,这似乎非常复杂。
相反,写一下(sqlite db?file?)开始时间和倒计时运行的持续时间。 无论何时需要显示它,查询它,并执行所需的过程来更新视图,无论有什么视图。这很容易(对我而言)回答所有规格,没有线程负担,只使用很少的磁盘空间。另外,您可以毫无问题地保存所有倒计时特定数据,这可能会很有用。