我一直在尝试设置一个功能,该功能正在获取自窗口出现给查看器以来的时间。
我一直在使用处理程序、计时器、currenttimemillis。
我已经成功地做到了。窗口显示自窗口显示给用户以来的持续时间 - 更新频率为 40fps,我喜欢它的外观和工作方式..
但!
当向后和向前进入窗口时,时间重新开始。我希望窗口显示自用户初始视图以来的(运行)时间,即使程序停止,我也不希望时间“中断”。
我正在使用 sharedpreferences 来保存字符串,并且我试图保存初始 System.currentTimeMillis(); 作为共享首选项(作为长)并使用此 if 语句在 oncreate 上再次加载它
SharedPreferences sData14;
private final int REFRESH_RATE = 25;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.orderwaiting);
setupVariables();
sData14 = getSharedPreferences(filename, 0);
}
private void setupVariables() {
mHandler.removeCallbacks(startTimer);
mHandler.postDelayed(startTimer, 0);
if (sData14 == null) {
starttime = System.currentTimeMillis();
sData14 = getSharedPreferences(filename, 0);
SharedPreferences.Editor editor = sData14.edit();
editor.putLong("sharedString14", starttime);
editor.commit();
};
if (sData14 != null) {
Long value_long = sData14.getLong("sharedString14", 1000000);
starttime = value_long;
};
编辑添加
我不使用 onresume 和 onpause。我必须这样做吗?
我希望 if 语句处理“案例”.. 我需要一个函数来处理程序已“关闭”的情况,但仍然需要该函数来跟踪我们及时达到的程度。
doinbackground 是否更好,并且也可以从另一个地方调用它?
它只是不加载共享数据...
换句话说,我需要从用户第一次查看此窗口时开始使用的动态数字。也许我还有其他方法可以做到这一点??
我想它应该“以这种方式”工作..但我似乎无法让它工作..
我希望我以一种简单的方式解决了我的问题。
解决方案
long startTime;
private final int REFRESH_RATE = 25;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.orderwaiting);
setupVariables();
}
private void setupVariables() {
SharedPreferences sData14 = getSharedPreferences(filename, 0);
startTime = sData14.getLong("sharedString14", -1);
**starttime = startTime;**
if(startTime == -1){
//startTime not previously saved
starttime = System.currentTimeMillis();
SharedPreferences.Editor editor = sData14.edit();
editor.putLong("sharedString14", starttime);
editor.commit();
}
mHandler.removeCallbacks(startTimer);
mHandler.postDelayed(startTimer, 0);
我添加了开始时间 = 开始时间,因为它不会在第二个视图上加载任何开始时间。感谢大卫。你拯救了我的一天:-)