实现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关闭了倒计时还在继续”的功能。希望以上内容能帮助到你,如果有任何疑问或者需要进一步的帮助,请随时联系我。祝你学习顺利!