有一个通过单例模式访问的 int 变量。
但问题是该变量被设置一次,并在一段时间后重置为 0。
它似乎被垃圾收集重置了。在 Activity.onSaveInstanceState 中保存值并在 onCreate() 中恢复它是不起作用的。
解决方案是将变量保存在磁盘中吗?
我只是想防止它重置。
最佳答案
只要应用程序处于 Activity 状态,变量就会保持 Activity 状态。 Android 因自动终止后台进程而臭名昭著。不幸的是,如果您尝试访问希望在应用程序的多次运行中保留的变量,则需要以某种方式将其写入磁盘。
但是,您有几个选择。我将列出那些 Google recommends .
Shared Preferences ,“将私有(private)原始数据存储在键值对中。”
Internal Storage ,“将私有(private)数据存储在设备内存上。”
External Storage ,“将公共(public)数据存储在共享外部存储上。”
SQLite Database ,“将结构化数据存储在私有(private)数据库中。”
Network Connection ,“使用您自己的网络服务器将数据存储在网络上。”
在所有这些解决方案中,Shared Preferences ,可能是最容易实现的。很简单:
public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state){ super.onCreate(state); . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // We need an Editor object to make preference changes. // All objects are from android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Commit the edits! editor.commit(); } }
代码来自Android Data Storage页。
关于java - 一段时间后重置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954848/