Java android如何使用SharedReference编程秒表
我正在用android sdk编程秒表,但我想在按下back键的时候继续。我在某种程度上理解活动生命周期,我应该过度使用onPause和onResume方法,但我不知道如何使用它们,因为SharePreference编辑器不能接收计时器对象Java android如何使用SharedReference编程秒表,java,android,Java,Android,我正在用android sdk编程秒表,但我想在按下back键的时候继续。我在某种程度上理解活动生命周期,我应该过度使用onPause和onResume方法,但我不知道如何使用它们,因为SharePreference编辑器不能接收计时器对象 package com.example.taekwondobuddy.util; import android.app.Activity; import android.content.SharedPreferences; import androi
package com.example.taekwondobuddy.util;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.LinearLayout;
public class Time extends Activity {
Chronometer mChronometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
mChronometer = new Chronometer(this);
layout.addView(mChronometer);
Button startButton = new Button(this);
startButton.setText("Start");
startButton.setOnClickListener(mStartListener);
layout.addView(startButton);
Button stopButton = new Button(this);
stopButton.setText("Stop");
stopButton.setOnClickListener(mStopListener);
layout.addView(stopButton);
Button resetButton = new Button(this);
resetButton.setText("Reset");
resetButton.setOnClickListener(mResetListener);
layout.addView(resetButton);
setContentView(layout);
}
View.OnClickListener mStartListener = new OnClickListener() {
public void onClick(View v) {
mChronometer.start();
}
};
View.OnClickListener mStopListener = new OnClickListener() {
public void onClick(View v) {
mChronometer.stop();
}
};
View.OnClickListener mResetListener = new OnClickListener() {
public void onClick(View v) {
mChronometer.setBase(SystemClock.elapsedRealtime());
}
};
}
有什么建议吗?谢谢你的帮助 如果您想在停止倒计时的地方继续倒计时,而不是需要共享首选项,如果您想继续计时,即使用户按“后退”按钮,您也不需要共享首选项,共享首选项用于存储基元和字符串数据类型,您可以使用或执行此操作,但是,如果您使用的是计时表,则无法将其自身存储在共享首选项中,而只能将其值存储在
elapsedRealtime()
或其他方法返回的值中
在AsyncTask或服务中,您可以保持轮询
elapsedRealtime()
,AsyncTask
保持活动状态,直到其doInBackground
方法完成,即使您按下后退按钮AsyncTask
保持活动状态是否要暂停计时器并在按下后退按钮时保存状态?是,我希望它的状态是我回去时离开的地方
// try this
public class Time extends Activity {
Chronometer mChronometer;
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sharedPreferences = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
mChronometer = new Chronometer(this);
layout.addView(mChronometer);
Button startButton = new Button(this);
startButton.setText("Start");
startButton.setOnClickListener(mStartListener);
layout.addView(startButton);
Button stopButton = new Button(this);
stopButton.setText("Stop");
stopButton.setOnClickListener(mStopListener);
layout.addView(stopButton);
Button resetButton = new Button(this);
resetButton.setText("Reset");
resetButton.setOnClickListener(mResetListener);
layout.addView(resetButton);
setContentView(layout);
}
private void showElapsedTime() {
long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();
Toast.makeText(MyActivity.this, "Elapsed milliseconds: " + elapsedMillis,
Toast.LENGTH_SHORT).show();
}
View.OnClickListener mStartListener = new View.OnClickListener() {
public void onClick(View v) {
int stoppedMilliseconds = 0;
String chronoText = mChronometer.getText().toString();
String array[] = chronoText.split(":");
if (array.length == 2) {
stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000
+ Integer.parseInt(array[1]) * 1000;
} else if (array.length == 3) {
stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000
+ Integer.parseInt(array[1]) * 60 * 1000
+ Integer.parseInt(array[2]) * 1000;
}
mChronometer.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);
mChronometer.start();
}
};
View.OnClickListener mStopListener = new View.OnClickListener() {
public void onClick(View v) {
mChronometer.stop();
}
};
View.OnClickListener mResetListener = new View.OnClickListener() {
public void onClick(View v) {
mChronometer.setBase(SystemClock.elapsedRealtime());
}
};
@Override
public void onBackPressed() {
super.onBackPressed();
prepareSharedData();
}
@Override
protected void onResume() {
super.onResume();
mChronometer.setText(sharedPreferences.getString("time", "00:00"));
}
@Override
protected void onPause() {
super.onPause();
prepareSharedData();
}
public void prepareSharedData(){
String chronoText = mChronometer.getText().toString();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("time", chronoText);
editor.commit();
}
}