android - 如何使用 SharedPrefences 保存倒数计时器?
问题描述
我有一个倒计时 60 秒。当用户离开应用程序时,我希望秒数继续。我尝试了很多次但失败了。这个计时器会在进入应用程序时开始倒计时。例如,当我在 20 秒后进入应用程序时,计时器将在 40 秒内继续我的代码
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
sp5 = PreferenceManager.getDefaultSharedPreferences(this);
xtime=System.currentTimeMillis()-
sp5.getLong("TIME",System.currentTimeMillis());
long timer5=mTimeLeftinMilis5-xtime;
final SharedPreferences.Editor editor = sp5.edit();
editor.putLong("TIME",timer5);
editor.commit();
}
public void StartTimer5(){
mCountDownTimer5=new CountDownTimer(mTimeLeftinMilis5,1000) {
@Override
public void onTick(long l5) {
mTimeLeftinMilis5=l5;
updateCountDownText5();
}
@Override
public void onFinish() {
mTimerRunning5=false;
btn_kalp5.setBackgroundResource(R.drawable.kalp);
cankontrol--;
tv_countdown5.setVisibility(View.GONE);
}
}.start();
mTimerRunning5=true;
xtime=System.currentTimeMillis();
SharedPreferences.Editor editor2 = sp5.edit();
editor2.putLong("TIME",xtime);
editor2.commit();
}
解决方案
package com.besli.timer;
import android.content.SharedPreferences;
import android.os.CountDownTimer;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
CountDownTimer timer;
int globalTime = 60;
TextView timeText;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timeText = findViewById(R.id.timeTextGlobal);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
if(sharedPreferences.getInt("Time",0) != 0){
globalTime = sharedPreferences.getInt("Time",0);
}
timer = new CountDownTimer(globalTime * 1000,1000) {
@Override
public void onTick(long l) {
globalTime -= 1;
timeText.setText(String.valueOf(globalTime));
}
@Override
public void onFinish() {
globalTime = 60;
}
}.start();
}
@Override
protected void onStop() {
super.onStop();
sharedPreferences.edit().putInt("Time",globalTime).apply();
}
}
这不是一个明确的解决方案。但是您可以检查 onStop()。当用户尝试退出应用程序时,我会获得剩余时间并将其保存到缓存中。然后对于第二次运行,我得到剩余的时间并重新开始倒计时。
您可以保存用户退出时的当前时间和用户下次打开您的应用程序时的时间,您可以计算差异。如果差为 300 秒;你可以再给5颗心。
对于在线时间,您可以在后台轻松使用倒数计时器。
我希望这可以帮助你。
推荐阅读
- c# - NPOI 破坏 xlsm 工作簿
- python - 我收到错误“TypeError:'type' 对象不支持项目分配”
- vb.net - 格式化时间跨度,小时数超过 24,而不是使用天数部分
- elasticsearch - 如果实体索引是基于时间的,如何使用 ElasticsearchEntityMapper?
- python - python - 如何在python列表中找到在n个组合中总和为给定数字的数字组合?
- c++ - 计算中间值的最通用方法
- html - 如何在 Materialise CSS 中创建可选列表
- laravel - 带有 LARAVEL Lighthouse PHP 的 GraphQL - 如何隐藏属性?
- c# - 为什么 c# 和 python 中的浮点数不能正确计算
- jmeter - Jmeter:想要在频繁的时间间隔中捕获随机令牌