gpt4 book ai didi

sqlite - 如何防止应用程序长时间保持后静态变量变为空

转载 作者:行者123 更新时间:2023-11-30 02:46:01 25 4
gpt4 key购买 nike

很久以前,我在市场上开发并发布了一个应用程序。现在一些用户指出长时间持有应用程序时会崩溃。现在我确定了崩溃的原因,那就是我正在使用一个带有静态变量和方法的类来存储数据(getter 和 setter)。现在我想用任何其他方式替换静态方式。从我的研究中我得到以下建议:

  1. 共享首选项:我必须存储 40 多个变量(字符串、int 和 json 数组和对象),所以我认为使用共享首选项不是一个好主意。

  2. SQLite:那里有 40 多个字段,我不需要一次保留一个以上的值。我正在从不同的 Activity 中获取字段的值。我的意思是一项 Activity 的名字,另一项 Activity 的年龄等所以我认为使用 SQLite 也不是一个好主意。

  3. 应用类:现在我正在考虑使用应用类来存储这些数据。应用程序长时间保持后会丢失静态变量等数据吗?

    • 现在我将静态变量替换为应用程序类。申请资料也过了很久也变成空了,请问?

它可能对某些人有用。

即使我的问题没有找到解决方案,我也找到了为什么我们不应该使用应用程序对象来保存数据的原因。请检查以下链接

Don't use application object to store data

最佳答案

通常,如果您必须保留一些东西以防您的 Activity 被破坏,您可以将所有这些东西保存在 onSaveInstanceState 中。并在 onCreate 中恢复它们或在 onRestoreInstanceState

public class MyActivity extends Activity {

int myVariable;
final String ARG_MY_VAR="myvar";

public void onCreate(Bundle savedState) {
if(savedState != null {
myVariable = savedState.getInt(ARG_MY_VAR);
} else {
myVariable = someDefaultValue;
}

public void onSaveInstanceState(Bundle outState) {
outState.putInt(ARG_MY_VAR, myVariable);
super.onSaveInstanceState(outState);

}
}

此处如果 Android 操作系统破坏了您的 Activity onSaveInstanceState将被调用并且您的重要变量将被保存。然后,当用户再次返回您的应用时,Android 操作系统会恢复 Activity ,并且您的变量将被正确初始化

当您调用 finish() 时不会发生这种情况不过,只有当 Android 出于某些原因破坏您的 Activity 时才会发生这种情况(这很可能在您的应用程序处于后台时随时发生)。

关于sqlite - 如何防止应用程序长时间保持后静态变量变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011405/

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