Inside' MyApplication'课程延伸课程'应用程序'
public static int globalflag = 0;
在调试器中,' globalflag'的值在MainActivity的推出时是0.我去了Fragment' MyFragment'并改变那里的值:
MyApplication.globalflag = 1;
值也会在调试器中更新。现在当我按下后退按钮时,调试器中MyApplication.globalflag的值显示为0(不再保留该值)。
如何确保在整个应用程序生命周期中保留此值?
我是Android开发的初学者,感谢此问题的任何输入。谢谢!
答案 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);