有没有人知道为什么我的 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/