1

我一直在尝试设置一个功能,该功能正在获取自窗口出现给查看器以来的时间。

我一直在使用处理程序、计时器、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);

我添加了开始时间 = 开始时间,因为它不会在第二个视图上加载任何开始时间。感谢大卫。你拯救了我的一天:-)

4

1 回答 1

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);
}
于 2012-05-02T07:07:03.913 回答