android onDestroy 仅在 vd 上工作正常

标签 android sharedpreferences ondestroy

有没有人知道为什么我的 onDestroy 方法在我的共享 pref 中保存一个 bool 值在 vd 上工作正常但在真实设备上并不总是工作? 当我退出应用程序并进一步返回主屏幕时,它看起来像在工作,但当我退出应用程序时,它却没有工作,留在应用程序列表窗口中并再次打开应用程序..很奇怪 是否有一些我不知道或可能取决于我的其他类(class)的错误?如果是这样我可以发布代码但是非常简单,就像 bool 保存和获取一样

编辑:如果你们试图在一个 fragment (MainActivity 的 fragment )中创建一个 ScrollView ,并尝试继续编辑模式并按下后退按钮退出您的应用程序,请把它搞砸几次你会看到 onDestroy 甚至 onStop 都不会被调用。

问。 那么,在以一致的方式退出应用程序之前,我应该如何保存我的偏好设置?一直可靠吗?同样为此,我需要一个 onDestroy 替代方案,甚至不需要 onStop,因为我只需要在应用程序退出之前保存 pref,而不是在 Activity 更改时保存,并且由于 onDestroy 不可靠(根据 Android 开发指南所说)我应该使用什么? 谢谢

变通方法:我将它放在 onCreateView() 中

boolPref = getActivity().getSharedPreferences("pref_bool", Context.MODE_PRIVATE);
firstVisit = boolPref.getBoolean("bool", DEFAULT);

if (firstVisit == false) {
  scrollView.setVisibility(View.VISIBLE);
}else{
  scrollView.setVisibility(View.INVISIBLE);
}

if (savedInstanceState == null) {
  scrollView.setVisibility(View.INVISIBLE);
}

其中 firstVisit 是在开始时声明的 boolean firstVisit;。 (这个 bool 技巧是另一篇文章的解决方案的一部分,但在 onDestroy() 或 onStop() 中保存效果不佳,因为有时它们不会被调用)

然后我在我的按钮 onClick 中添加了这个:

      boolPref = getActivity().getSharedPreferences("pref_bool", Context.MODE_PRIVATE);
      SharedPreferences.Editor editor_bool = boolPref.edit();
      editor_bool.putBoolean("bool", false);
      editor_bool.apply();

      scrollView.setVisibility(View.VISIBLE);

它有效,它基本上做的是:每次我的应用程序启动时将我的 ScrollView 设置为隐藏(通过 savedInstanceState 如下 @bwt 建议),并在我传递到另一个 Activity 并返回时保持隐藏(使用 bool = true ) 除非我按下第一个 Activity 中的按钮(设置并保存 bool == false),所以从那时起,即使我传递到另一个 Activity 并返回, ScrollView 也始终可见

最佳答案

我认为保存首选项的正确时机是它发生变化时,而不是应用程序退出时。特别是因为 Android 可能会选择简单地终止进程(和包含的应用程序)而不调用任何回调。使用 apply() 而不是 commit(),这样应用程序就不必等待。

或者,您可以覆盖 onSaveInstanceState() .它不是基本生命周期的一部分,但让您有机会在被销毁之前存储 Activity 的当前状态。

关于android onDestroy 仅在 vd 上工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062918/

相关文章:

java - 如何在 Android Java 中创建一个介于最小值和最大值之间的随机数,不包括介于最小值和最大值之间的一些数字?

android - 检查 ssharedpreference 中是否存在列表项

java - 如何在应用程序关闭时删除文件

android - 向 Android Activity 注册 "onDestroy event handler"

java - Android 中的致命异常 : Thread-92 (java. util.ConcurrentModificationException)

android - 静态 fragment

android - 难以读取 XML 文件

java - 应用程序崩溃时将应用程序上下文存储在 SharedPreferences 中

android - 将日期保存到共享首选项

android - 如何区分onDestroy是否会在onPause之后被调用