未在Android 16上通过提交保存SharedPreference

时间:2018-12-11 16:24:48

标签: android sharedpreferences

我有一个很奇怪的问题,只发生在android 16上而不发生在android 27上[我没有测试其他版本来检查它的开始位置

        SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(getApplication()).edit();

     edit.putBoolean(getString(R.string.pref_custom_list), false);
      edit.putStringSet(getString(R.string.pref_username_list_, getCurrentUser().getAuth().getUserId()), imported);
 edit.commit();
System.exit(1);

导入的是Set<String>

当我重新启动应用程序并尝试阅读

 final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this.getApplication());

final Set<String> cachedList = pref.getStringSet(getString(R.string.pref_username_list_, userid), new HashSet<String>(APIFacade.CACHE_SIZE));

在android 16上,我得到了一个空集,但在27上,一切都很好

可能是什么?

1 个答案:

答案 0 :(得分:0)

您的问题可能是由于:

System.exit(1);

您不应该从应用程序中调用它。这将立即终止您的过程,因此您遇到意外行为也就不足为奇了。您可能先终止该进程,然后才能将更改提交到磁盘。在更新的设备上,它可能足够快,您可以避免此问题。

无论您要运行应用程序的用户界面而不是尝试终止您的过程,只要您运行此代码的任何活动都应仅调用finish()