当我按下后退按钮时,如何保持CountDownTimer运行
我有一个更新TextView的CountDownTimer,但是当我按下后退按钮时,它停止。当我按下后退按钮时,如何保持CountDownTimer运行
CountDownTimer timer = new CountDownTimer(600000, 100) {
public void onTick(long millisUntilFinished) {
calendar.setTimeInMillis(millisUntilFinished);
cron.setText(sf.format(calendar.getTime()));
}
public void onFinish() {
}
};
当我按下后退按钮并且活动被破坏时,我该如何保持它运行?
PS:我也开始GPS服务,当计时器启动时,有没有办法将CountDownTimer放入服务中?
如果您的计时器需要超越您的Activity
的生命周期,那么它不属于那里。您当然可以将它放入Service
或另一个可以驻留在内存中的对象(如单例)。
我认为应该可以将倒数计时器放入服务中。您可以通过向服务发送意向来启动定时器。此外,你将不得不使用一些机制,如回调或意图或信使将更新时间传递回您的用户界面。
覆盖后退按钮,然后使其表现得像主页按钮。这样你的活动永远不会被破坏。这就是说,我不认为这被认为是“良好的做法”。
要做我说的只是把它放到你的活动课上。
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
不管你做什么,作为优化,您应该确保TextView的未更新,如果TextView的是不显示在屏幕上。这应该可以节省电池寿命,并且可能会阻止创建会减少垃圾收集的字符串。
正如prashant和Devunwire指出的那样,您需要使用服务。确保在绑定之前调用startService()
,即使调用Activity被销毁,这也会导致Service保持活动状态。
确保服务在计时器结束后自行停止,并执行任何其应有的操作。
编辑:我不会覆盖后退按钮,因为你无法正确关闭你的应用程序。 – 2012-07-18 17:16:45
我将计时器移至服务,但TextView未更新。如果我在服务中执行cron.getText(),它将打印该值。但在用户界面中,它不会更新。 – fonini 2012-07-18 17:28:53
嗯,我不确定。如果你在服务中获得了价值,你显然可以访问这个小部件......也许你需要在视图上调用'invalidate()'。我使用Messenger将消息从服务发送到活动,但该应用程序不是时间关键的。你应该试试它有多快。告诉我你的结果! – 2012-07-18 17:41:09
在这种情况下,什么是最好的:单身或服务? – fonini 2012-07-18 17:01:16
无论适合您的应用程序。没有对错。服务很好,因为系统仍然可以管理他们的生命周期,但这可能超出了您的应用程序所希望的范围。 – Devunwired 2012-07-18 17:01:41