从android中的第一个视图获取持续时间

时间:2012-05-01 18:47:21

标签: java android timer sharedpreferences

我一直在尝试设置一个功能,这个功能可以让窗口显示给观众。

我一直在使用处理程序,计时器,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,因为它不会在第二个视图上加载任何启动时间。 感谢大卫......你救了我的一天: - )

1 个答案:

答案 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);
}