1

我正在构建一个带有PreferenceActivityService的应用程序(由于android:process=":remote"标志在它自己的远程进程中运行)并且两者都需要以编程方式访问SharedPreferences。目前,我正在使用以下代码获取SharedPreference对象,该对象使用ServicePreferenceActivity类中定义的getSharedPreferences方法:

SharedPreferences sharedPrefs = getSharedPreferences("com.mypackage_preferences", MODE_PRIVATE, MODE_MULTI_PROCESS)

这和下面的一样吗?

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences()

1)在第二个中我不能指定标志,或者有没有办法指定它们?

2)我是否真的需要指定 MODE_MULTI_PROCESS 因为我正在访问/修改来自ServicePreferenceActivity的共享首选项?我认为大多数时候你有一个修改属性的PreferenceActivity和另一个读取/修改它们的Activity ,所以 MODE_MULTI_PROCESS 几乎总是需要,或者只有在对SharedPreferences有多个并且可能同时访问时才需要它(如在我的情况下,当您在PreferenceActivity中编辑首选项时,后台服务可以处于活动状态)

3) MODE_MULTI_PROCESS的文档说在应用程序有多个进程的情况下有时需要这种行为,所有进程都写入同一个 SharedPreferences 文件,这是否意味着我的Service和我的PreferenceActivity可以指向不同的首选项文件?如何更改PreferenceActivity中的首选项文件名?

4)以这种方式命名共享首选项是因为它们在您的应用程序的所有组件(活动、服务等)之间共享,对吗?非共享首选项(即您可以在活动中使用getPreferences()获得的首选项)对于创建它们的组件是本地的,但被保存在同一个 *com.mypackage_preferences* 文件中?这可以回答我在第3 点中的疑问)

4

2 回答 2

3

MODE_MULTI_PROCESS仅当您从不同进程访问首选项时才需要。如果您只是有使用共享首选项的不同活动,那么您不需要MODE_MULTI_PROCESS.

你提到你有一项服务。只要该服务与您仍然不需要的活动在同一进程中运行MODE_MULTI_PROCESS。除非您在清单android:process="..."中的标记中指定,否则该服务将默认在同一进程中运行。<service>

于 2012-05-11T07:34:06.293 回答
0

另一大优势:繁忙服务中的垃圾收集不会干扰用户界面中的动画。

于 2012-11-13T20:23:48.080 回答