如何使用SharedPrefences保存倒数计时器?

时间:2018-10-06 15:54:08

标签: android save sharedpreferences countdowntimer

我有一个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();
}

1 个答案:

答案 0 :(得分:0)

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

对于在线时间,您可以在后台轻松使用countdowntimer。

希望对您有帮助。