搜索建议为游戏构建计时器

时间:2013-07-29 15:53:08

标签: android

不幸的是我的架构不起作用所以我需要你的帮助。

我想解决的问题:

我编写了一个迷你游戏,您可以在其中选择“跑1分钟”等练习。

  • 在app中显示倒计时:片段,活动,操作栏......
  • 完成后完成任务
  • 如果离开片段,
  • 倒计时应该会提前运行 如果我回到片段
  • 倒计时应该再次正确进展

我尝试在实现CountDownTimer时解决问题。但是如果countDownTimer是片段的一部分,如果我离开片段,它将被销毁。当我回来时,倒计时器从一开始就开始......

所以我想到了一个线程...但是我怎么能在片段中显示倒计时以及我想要的任何地方?

这个线程一直活着直到他完成了吗?即使我关闭了应用程序?

所以你能说出一些我可以搜索解决问题的关键词。或者改为描述解决方案?

感谢您的建议;)

2 个答案:

答案 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?)开始时间和倒计时运行的持续时间。 无论何时需要显示它,查询它,并执行所需的过程来更新视图,无论有什么视图。这很容易(对我而言)回答所有规格,没有线程负担,只使用很少的磁盘空间。另外,您可以毫无问题地保存所有倒计时特定数据,这可能会很有用。