java - 一段时间后重置变量

标签 java android garbage-collection

有一个通过单例模式访问的 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/

相关文章:

java - 当我在单独的线程(实现 Runnable)上运行该类时,为什么会得到 "android.os.NetworkOnMainThreadException"?

Python 垃圾回收

java - 我对 MaxMetaspaceSize 感到困惑

java - 使用 Apache FOP 从大图像生成 PDF

java - 在 Google+ 的 Android 应用程序中复制 Slinging 效果

java - Hashmap jdk1.7无锁get()和同步put()的线程安全

java - 如何在 Java/Kotlin 中使用新的 StateRestorationPolicy?

android - 我怎样才能第二次正确保存我的位图?

Java:引用同步对象是否需要 volatile/final?

java - 垃圾收集和线程