是否有人知道为什么我的onDestroy方法在我的共享pref中保存bool在vd上运行正常但是并不总是在真实设备上工作? 它似乎工作当我退出应用程序并返回到主屏幕,但不是当我退出应用程序时,保持在应用程序列表窗口并再次打开应用程序..怪异 是否有一些我不知道或可能依赖于我的其他课程的错误?如果是这样我可以发布代码,但非常简单,就像说bool save和get
一样编辑:如果你们试图在片段中创建一个滚动视图(MainActivity的片段),并尝试继续编辑模式并按回按钮退出你的应用,搞乱它几次,你会看到onDestroy,甚至onStop也不会被召唤。
问。那么在以一致的方式退出应用之前,我该如何保存我的pref?一直可靠吗?也因为我需要一个onDestroy替代品,甚至不需要onStop,因为我需要在应用退出之前保存pref而不是活动更改,并且因为onDestroy不可靠(来自Android Dev指南所说)应该是什么我用?? 感谢
替代方法:我把它放在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;
。
(这个布尔技巧是来自另一篇文章的解决方案的一部分,但它没有在onDestroy()或onStop()中保存得很好,因为有时它们不会被调用)
然后我在我的按钮上添加了这个点击:
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设置为隐藏(通过下面建议的@bwt的savedInstanceState),当我传递给另一个活动并返回时保持隐藏(使用bool = true )除非我按下第一个活动内的按钮(设置并保存bool == false)所以从那时起滚动视图始终可见,即使我转到另一个活动并回来
答案 0 :(得分:1)
我认为保存首选项的正确时机是更改时,而不是应用程序退出时。特别是因为Android可以选择简单地杀死进程(和包含的应用程序)而不调用任何回调。使用apply()
代替commit()
,以便应用程序不必等待。
或者,您可以覆盖onSaveInstanceState()。它不是基本生命周期的一部分,但是您可以在被销毁之前存储Activity
的当前状态。