Android,如何在启动其他活动时保持CountDownTimer运行

3

您好,我有一个活动,在textView中显示倒计时(使用CountDownTimer),但当我启动其他活动(配置屏幕)或更改屏幕方向时,倒计时器会停止,我希望在后台保持此计时器运行。我尝试创建一个带有倒计时器的线程,但它不起作用,有人知道如何解决吗?

谢谢。

2个回答

4
您不必创建一个后台线程来运行定时器。只需记住定时器启动的时间,然后在需要重新启动它时,根据这个记住的时间值显示时间即可。
所以:
1. 当用户启动一个定时器时,将系统时间记录为开始时间。 2. 在AsyncTask中启动定时器,并基于记录的开始时间更新UI 3. 当Activity离开时,停止AsyncTask。 4. 当Activity变为活动状态时,重新启动AsyncTask并继续进行第2步。 5. 当用户停止计时器时,重置开始时间并停止AsyncTask。

@Enric 请在接受时也点个赞。我为你的问题投了几个赞,它们很好。 - taxeeta

1

您可以重写onPause方法并停止计时器,然后在那里保存最后一个值。您还需要重写onResume并使用上次的值启动计时器。


但它不能继续计时,例如:-启动主活动时间流逝:0秒计时器显示0秒,-15秒后我打开另一个活动(保存计时器值和在新活动中花费的5秒钟)返回到第一个活动:(恢复计时器值)时间流逝:20秒计时器显示15秒。 - Enric
在编写 onPause() 方法的时候,可以使用 System.currentTimeMillis() 来保存当前时间。 - KnightCavalry
你可以在 onPause() 方法中使用 System.currentTimeMillis() 来记录离开第一个活动的时间,然后在 onResume() 方法中再次使用该方法来获取返回第一个活动的时间。将两个时间差加上你的 15 秒即可节省时间。 - KnightCavalry
谢谢,我用GregorianCalendar做到了,现在它运行得很好。 - Enric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接