首页 > 解决方案 > 如何使用 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();
}

标签: androidsavesharedpreferencescountdowntimer

解决方案


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颗心。

对于在线时间,您可以在后台轻松使用倒数计时器。

我希望这可以帮助你。


推荐阅读