我有一个CountdownTimer,从60秒开始倒计时。 CountdownTimer的工作原理是将textView设置为剩余的毫秒数,但是每当我旋转设备时,CountdownTimer都会重置。

我知道发生这种情况是因为Activity轮流重新启动。因此,我尝试在重新启动Activity之后将剩余的时间保存在捆绑包中,然后还原它。

long transferValue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_playtimemode);

    Log.d("Debug", "onCreate: " + transferValue);

    long setTime = 60000;
    long difference = setTime - transferValue;

    new CountDownTimer(difference, 1000) {

        public void onTick(long millisUntilFinished) {
            millisUntilFinishedToSave = millisUntilFinished;
            tvCountdown.setText("" + millisUntilFinished / 1000);
        }

        public void onFinish() {
            tvCountdown.setText("done!");
        }
    }.start();

}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putLong("millisKey", millisUntilFinishedToSave);

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    transferValue = savedInstanceState.getLong("millisKey");
    Log.d("Debug", "onRestoreInstanceState(): " + transferValue);
}


但是,这不起作用。我正在此代码的顶部初始化transferValue(因此它返回0),但是我如何才能将数据从saveInstanceState保存到CountdownTimer?

07-06 20:21:30.038: D/Debug(28995): onCreate: 0
07-06 20:21:30.043: D/Debug(28995): onRestoreInstanceState(): 55994

最佳答案

我会给您的计时器它自己的线程。您的计时器正在停止,因为它位于UI线程上(如您所述),并且在UI重绘时,Activity被重新初始化。所有长时间运行的进程都应具有自己的线程。经验法则:尽快退出UI线程。

这是使用服务的示例。不论屏幕方向更改甚至活动焦点更改如何,此服务都将在调用时启动并保留在内存中。

这是服务:

public class Timer extends Service {

    @Override
    public IBinder onBind(Intent i) {
        return null;
    }
    @Override
    public int onStartCommand(Intent i, int flags, int startId) {
        // Put your timer code here
    }
}


您将需要将此行添加到清单(在应用程序打开/关闭标签之间的某个位置):

<service android:name=".Timer" />


然后,您可以使用此功能随时启动服务(请注意,您可以一遍又一遍地启动它,递归调用不会提供新服务。):

startService(new Intent(this, Timer.class));

关于java - 轮播后恢复CountdownTimer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11368107/

10-09 01:06