实现Android Fragment关闭后倒计时继续运行的方法

1. 整体流程

首先我们需要创建一个倒计时的功能,然后在Fragment中启动倒计时,当Fragment关闭时,我们需要保存倒计时的状态,再次打开Fragment时,恢复倒计时的状态,让倒计时继续运行。

下面是整个流程的步骤表:

步骤 操作
1 创建一个倒计时的类 CountdownTimer
2 在Fragment中启动倒计时
3 在Fragment关闭时保存倒计时的状态
4 再次打开Fragment时恢复倒计时的状态

2. 代码实现

2.1 创建一个倒计时的类 CountdownTimer

首先我们需要创建一个倒计时的类 CountdownTimer,代码如下所示:

public class CountdownTimer extends CountDownTimer {

    private long mTimeLeftInMillis;
    private boolean mTimerRunning;

    public CountdownTimer(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        mTimeLeftInMillis = millisInFuture;
        mTimerRunning = false;
    }

    @Override
    public void onTick(long millisUntilFinished) {
        mTimeLeftInMillis = millisUntilFinished;
        // 更新UI显示倒计时时间
    }

    @Override
    public void onFinish() {
        mTimerRunning = false;
        // 倒计时结束后的操作
    }

    public void startTimer() {
        start();
        mTimerRunning = true;
    }

    public void stopTimer() {
        cancel();
        mTimerRunning = false;
    }

    public boolean isTimerRunning() {
        return mTimerRunning;
    }

    public long getTimeLeftInMillis() {
        return mTimeLeftInMillis;
    }
}

2.2 在Fragment中启动倒计时

在Fragment的onCreateView方法中启动倒计时,代码如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_timer, container, false);

    CountdownTimer countdownTimer = new CountdownTimer(60000, 1000); // 设置60秒倒计时,每隔1秒更新一次
    countdownTimer.startTimer(); // 启动倒计时

    return view;
}

2.3 在Fragment关闭时保存倒计时的状态

在Fragment的onPause方法中保存倒计时的状态,代码如下所示:

@Override
public void onPause() {
    super.onPause();

    if (countdownTimer.isTimerRunning()) {
        // 保存倒计时的剩余时间
        long timeLeftInMillis = countdownTimer.getTimeLeftInMillis();
        // 将timeLeftInMillis保存到SharedPreferences中
        SharedPreferences.Editor editor = getActivity().getSharedPreferences("timer", Context.MODE_PRIVATE).edit();
        editor.putLong("timeLeftInMillis", timeLeftInMillis);
        editor.apply();
    }
}

2.4 再次打开Fragment时恢复倒计时的状态

在Fragment的onCreate方法中恢复倒计时的状态,代码如下所示:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SharedPreferences prefs = getActivity().getSharedPreferences("timer", Context.MODE_PRIVATE);
    long timeLeftInMillis = prefs.getLong("timeLeftInMillis", 0);

    if (timeLeftInMillis > 0) {
        countdownTimer = new CountdownTimer(timeLeftInMillis, 1000); // 恢复倒计时
        countdownTimer.startTimer(); // 启动倒计时
    }
}

3. 类图

下面是倒计时相关的类图:

classDiagram
    class CountdownTimer {
        - long mTimeLeftInMillis
        - boolean mTimerRunning
        + CountdownTimer(millisInFuture: long, countDownInterval: long)
        + onTick(millisUntilFinished: long): void
        + onFinish(): void
        + startTimer(): void
        + stopTimer(): void
        + isTimerRunning(): boolean
        + getTimeLeftInMillis(): long
    }

通过以上步骤,我们就实现了“Android Fragment关闭了倒计时还在继续”的功能。希望以上内容能帮助到你,如果有任何疑问或者需要进一步的帮助,请随时联系我。祝你学习顺利!