应用程序级静态变量值不会保留活动片段

时间:2016-10-14 12:37:39

标签: android android-fragments global-variables

Inside' MyApplication'课程延伸课程'应用程序'

 public static int globalflag = 0;

在调试器中,' globalflag'的值在MainActivity的推出时是0.我去了Fragment' MyFragment'并改变那里的值:

 MyApplication.globalflag = 1;

值也会在调试器中更新。现在当我按下后退按钮时,调试器中MyApplication.globalflag的值显示为0(不再保留该值)。

如何确保在整个应用程序生命周期中保留此值?

我是Android开发的初学者,感谢此问题的任何输入。谢谢!

1 个答案:

答案 0 :(得分:0)

首先我认为这种情况正在发生:

您的Application实例生命周期与构成您应用的组件相关联。

明智的Vogella说。

  

无论何时使用Android,都会创建应用程序对象   组件已启动。它以独特的新流程开始   唯一身份用户下的ID。即使你没有指定一个   在AndroidManifest.xml文件中,Android系统会创建一个默认对象   对你而言。

此外:

  

应用程序对象在任何组件之前启动,至少运行   只要应用程序的另一个组件运行。

所以这意味着当你按下Activity上的后退按钮触发活动的生命周期结束时(有效地杀死它) 对于其资源,应用程序实例也可能被系统垃圾收集/杀死(因为实际上不需要它)。

还有其他更好的机制来保持活动/应用程序生命周期之间的状态,例如SharedPreferences或SQLite

您可以查看this tutorial,详细了解如何使用SharedPreferences

但这很简单:

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

编写/保存数据:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

阅读持久数据:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);