一段时间后重置变量

时间:2015-08-12 02:01:43

标签: java android garbage-collection

通过单例模式访问一个int变量。

但问题是变量设置一次,并在一段时间后重置为0.

它似乎被垃圾收集重置。保存Activity.onSaveInstanceState中的值并在onCreate()中恢复它是不起作用。

解决方案是将变量保存在磁盘中吗?

我只是想阻止它重置。

2 个答案:

答案 0 :(得分:0)

  

我只是想阻止它重置。

您可以使用SharedPreferences保存,然后再检索变量。可以找到有关如何操作的教程here

但是,请注意,您是否确定您的变量因垃圾回收而重置?

答案 1 :(得分:0)

只要应用程序处于活动状态,变量就会保持活动状态。 Android因自动杀死后台进程而臭名昭着。不幸的是,如果您尝试访问一个您希望在应用程序的多次运行中保留的变量,那么 需要以某种方式将其写入磁盘。

但是,您可以选择几种方案。我将列出Google recommends

  • Shared Preferences,“将私有原始数据存储在键值对中。”

  • Internal Storage,“将私人数据存储在设备内存中。”

  • External Storage,“将公共数据存储在共享外部存储设备上。”

  • SQLite Database,“将结构化数据存储在私人数据库中。”

  • 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页。