我正在构建一个带有PreferenceActivity和Service的应用程序(由于android:process=":remote"标志在它自己的远程进程中运行)并且两者都需要以编程方式访问SharedPreferences。目前,我正在使用以下代码获取SharedPreference对象,该对象使用Service和PreferenceActivity类中定义的getSharedPreferences方法:
SharedPreferences sharedPrefs = getSharedPreferences("com.mypackage_preferences", MODE_PRIVATE, MODE_MULTI_PROCESS)
这和下面的一样吗?
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences()
1)在第二个中我不能指定标志,或者有没有办法指定它们?
2)我是否真的需要指定 MODE_MULTI_PROCESS 因为我正在访问/修改来自Service和PreferenceActivity的共享首选项?我认为大多数时候你有一个修改属性的PreferenceActivity和另一个读取/修改它们的Activity ,所以 MODE_MULTI_PROCESS 几乎总是需要,或者只有在对SharedPreferences有多个并且可能同时访问时才需要它(如在我的情况下,当您在PreferenceActivity中编辑首选项时,后台服务可以处于活动状态)
3) MODE_MULTI_PROCESS的文档说在应用程序有多个进程的情况下有时需要这种行为,所有进程都写入同一个 SharedPreferences 文件,这是否意味着我的Service和我的PreferenceActivity可以指向不同的首选项文件?如何更改PreferenceActivity中的首选项文件名?
4)以这种方式命名共享首选项是因为它们在您的应用程序的所有组件(活动、服务等)之间共享,对吗?非共享首选项(即您可以在活动中使用getPreferences()获得的首选项)对于创建它们的组件是本地的,但被保存在同一个 *com.mypackage_preferences* 文件中?这可以回答我在第3 点中的疑问)