android onDestroy 仅适用于 vd
android onDestroy works fine only on vd
有谁知道为什么我的 onDestroy 方法在我的共享首选项中保存一个布尔值在 vd 上工作正常但在真实设备上并不总是工作?
当我退出应用程序并进一步返回主屏幕时它看起来像在工作,但当我退出应用程序时却没有工作,保留在应用程序列表 window 中并再次打开应用程序..很奇怪
是否有一些我不知道或可能取决于我的其他 类 的错误?如果可以,我可以 post 代码,但非常简单,就像 bool save 和 get
所说的那样
编辑: 如果你们尝试在片段(MainActivity 的片段)中创建滚动视图,并尝试继续编辑模式并按返回按钮退出您的应用程序, 弄乱它几次你会看到 onDestroy 甚至 onStop 都不会被调用。
Q. 那么我应该如何以一致的方式在退出应用程序之前保存我的偏好设置?一直可靠吗?同样为此,我需要一个 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;
在开始时声明的。
(这个布尔技巧是另一个 post 解决方案的一部分,但它在 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);
它有效,它基本上做的是:每次我的应用程序启动时将我的滚动视图设置为隐藏(通过 savedInstanceState 如下 @bwt 建议),并在我传递给另一个 activity 来时保持隐藏返回(使用 bool = true),除非我先按下里面的按钮 activity(设置并保存 bool == false)所以从那时起,即使我传递给另一个 activity 并且来,scrollview 总是可见的返回
我认为保存首选项的正确时机是它发生变化时,而不是应用程序退出时。特别是因为 Android 可能会选择简单地终止进程(和包含的应用程序)而不调用任何回调。使用apply()
代替commit()
,这样申请就不用等待了。
或者您可以覆盖 onSaveInstanceState()。它不是基本生命周期的一部分,但让您有机会在被销毁之前存储 Activity
的当前状态。
有谁知道为什么我的 onDestroy 方法在我的共享首选项中保存一个布尔值在 vd 上工作正常但在真实设备上并不总是工作? 当我退出应用程序并进一步返回主屏幕时它看起来像在工作,但当我退出应用程序时却没有工作,保留在应用程序列表 window 中并再次打开应用程序..很奇怪 是否有一些我不知道或可能取决于我的其他 类 的错误?如果可以,我可以 post 代码,但非常简单,就像 bool save 和 get
所说的那样编辑: 如果你们尝试在片段(MainActivity 的片段)中创建滚动视图,并尝试继续编辑模式并按返回按钮退出您的应用程序, 弄乱它几次你会看到 onDestroy 甚至 onStop 都不会被调用。
Q. 那么我应该如何以一致的方式在退出应用程序之前保存我的偏好设置?一直可靠吗?同样为此,我需要一个 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;
在开始时声明的。
(这个布尔技巧是另一个 post 解决方案的一部分,但它在 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);
它有效,它基本上做的是:每次我的应用程序启动时将我的滚动视图设置为隐藏(通过 savedInstanceState 如下 @bwt 建议),并在我传递给另一个 activity 来时保持隐藏返回(使用 bool = true),除非我先按下里面的按钮 activity(设置并保存 bool == false)所以从那时起,即使我传递给另一个 activity 并且来,scrollview 总是可见的返回
我认为保存首选项的正确时机是它发生变化时,而不是应用程序退出时。特别是因为 Android 可能会选择简单地终止进程(和包含的应用程序)而不调用任何回调。使用apply()
代替commit()
,这样申请就不用等待了。
或者您可以覆盖 onSaveInstanceState()。它不是基本生命周期的一部分,但让您有机会在被销毁之前存储 Activity
的当前状态。