1

我有一个更新 TextView 的 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放在服务中?

4

4 回答 4

2

如果您的计时器需要超出您的生命周期Activity,那么它不属于那里。您当然可以将它放入一个Service或另一个可以驻留在内存中的对象(如单例)中。

于 2012-07-18T16:59:41.040 回答
1

正如 prashant 和 Devunwire 指出的那样,您需要使用服务。确保startService()在绑定之前调用它,即使调用的 Activity 被销毁,这也会导致服务保持活动状态。

还要确保服务stopSelf()在计时器完成并完成它应该做的任何事情后自行停止。

于 2012-07-18T17:15:34.073 回答
0

我认为应该可以将倒数计时器放在服务中。您可以通过向服务发送意图来触发计时器启动。此外,您将不得不使用某种机制(例如回调、意图或信使)将更新时间传递回您的 UI。

于 2012-07-18T16:56:50.287 回答
0

覆盖后退按钮,然后使其行为类似于主页按钮。这样你的活动就不会被破坏。也就是说,我不认为这被认为是“好的做法”。

要做到我所说的,您只需将其放入您的活动课程中。

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

无论您做什么,作为一种优化,您应该确保如果 TextView 在屏幕上不可见,则不会更新 TextView。这应该可以节省电池寿命,并可能防止创建将减少垃圾收集的字符串。

于 2012-07-18T17:08:29.473 回答