我一直在尝试设置一个功能,这个功能可以让窗口显示给观众。
我一直在使用处理程序,计时器,currenttimemillis。
我成功了。窗口显示自用户显示窗口以来的持续时间 - 更新频率为40fps,我喜欢它的外观和工作方式..
BUT!
当向后和向前进入窗口时,时间重新开始。 我希望窗口显示自用户初始视图以来的(运行)时间,即使程序停止,我也不希望时间“损坏”。
我使用sharedpreferences来保存字符串,我试图保存初始System.currentTimeMillis();作为共享首选项(作为long)并使用此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语句处理“case”..我需要一个函数来处理程序已经“关闭”的情况,但仍然需要函数来跟踪我们到达的时间有多远
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);
我添加了starttime = startTime,因为它不会在第二个视图上加载任何启动时间。 感谢大卫......你救了我的一天: - )
答案 0 :(得分:0)
啊好的,我误解了你最初的问题。你检查你的偏好的方式不太对,你也可以简化它。下面的代码应该可以解决您的问题:
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);
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);
}