android onDestroy仅在vd上运行正常

时间:2016-01-28 13:31:39

标签: android sharedpreferences ondestroy

是否有人知道为什么我的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)所以从那时起滚动视图始终可见,即使我转到另一个活动并回来

1 个答案:

答案 0 :(得分:1)

我认为保存首选项的正确时机是更改时,而不是应用程序退出时。特别是因为Android可以选择简单地杀死进程(和包含的应用程序)而不调用任何回调。使用apply()代替commit(),以便应用程序不必等待。

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