gpt4 book ai didi

java - 从android中的第一个 View 获取持续时间

转载 作者:行者123 更新时间:2023-12-01 05:21:03 25 4
gpt4 key购买 nike

我一直在尝试设置一个函数,该函数获取窗口向查看器显示以来的时间。

我一直在使用处理程序、计时器、currenttimemillis。

我已经成功做到了。该窗口显示了自该窗口向用户显示以来的持续时间 - 更新频率为 40fps,我喜欢它的外观和工作方式。

但是!

当向后和向前进入窗口时,时间会重新开始。我希望窗口显示自用户初始 View 以来的(运行)时间,并且即使程序停止,我也不希望时间“中断”。

我正在使用共享首选项来保存字符串,并且我尝试保存初始的 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 语句处理“情况”..并且我需要一个函数来处理程序已“关闭”的情况,但仍然需要该函数来跟踪我们及时到达的程度.

在后台进行操作并能够从其他地方调用它是否更好?

<小时/>

它只是不加载共享数据...

换句话说,我需要一个从用户第一次查看此窗口时开始使用的动态编号。也许还有其他方法我也可以做到这一点?

我想它应该“这样”工作..但我似乎无法让它工作..

我希望我已经以简单的方式解决了我的问题。

<小时/>

解决方案

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,因为否则它不会在第二个 View 上加载任何开始时间。感谢大卫..你拯救了我的一天:-)

最佳答案

啊好吧,我误解了你最初的问题。您检查偏好的方式不太正确,您也可以将其简化一些。下面的代码应该可以解决您的问题:

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

关于java - 从android中的第一个 View 获取持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10402557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com