1

我建立了PreferenceActivity应用程式和服务中管理两个PreferenceActivity SharedPreferences和服务(在其自己的远程进程中运行,由于安卓过程=“:远程”标志)并且都需要以编程方式访问SharedPreferences。目前时间我得到一个SharedPreference对象与使用getSharedPreferences定义方法在两个服务PreferenceActivity类下面的代码:相同的应用程序

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

这是一样的下面?

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences() 

1)在第二个我不能指定标志,或者是有指定它们的方法吗?

2)我真的需要指定MODE_MULTI_PROCESS因为我访问/来自服务PreferenceActivity修改共享偏好?我认为,大部分的时间你有PreferenceActivity可修改的属性和另一活动读取/修改它们,所以是MODE_MULTI_PROCESS需要几乎总是或仅当有多个,可能并发访问的需要SharedPreferences(在我的情况下,与后台服务,而你在PreferenceActivity编辑的喜好,可以是积极的)

3)MODE_MULTI_PROCESS文档说这种行为的情况下,有时期望在应用程序有多个进程,全部写入同一SharedPreferences文件,这是否意味着我服务和我PreferenceActivity可以指向不同的偏好设置文件?你如何在PreferenceActivity改变首选项文件名?

4)共享偏好以这种方式命名,因为它们是在应用程序的所有组件(活动,服务等)之间共享的,对吗?非共享偏好是本地创建它们,但被保存在同一个* com.mypackage_preferences *文件中的分量(即那些可以用的getPreferences()在你的活动获得)?这可以回答我的疑惑点3)

回答

3

你只需要MODE_MULTI_PROCESS如果从不同的过程访问的偏好。如果你只是有使用共享的首选项不同的活动,那么你不需要MODE_MULTI_PROCESS

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

+0

将它在同一进程中运行,即使该活动将被终止并重新启动,服务在启动过程?也就是说,系统是否可以识别服务器和活动属于同一个包,然后在同一个过程中运行它们?这听起来很奇怪,我认为他们没有在同一个进程中运行,因为这个活动并没有启动服务,或者它可以启动它,然后它可以被杀死,而服务器仍然在后台运行(这是一个后台服务,我不停止它,除非用户希望它停止)。 –

+0

你能简单地向我解释如何设置android:process属性来指定我希望Service在不同的进程中运行吗?如果我这样做,如果用户杀死了启动它的活动(即通过任务管理器),是否可以避免该服务被杀死?此外,如果服务由拦截BOOT_COMPLETED事件的广播接收器启动,那么服务是否存在于其自己的进程中,并且它是否从稍后调用startService的活动接收到该服务的意图? –

+1

如果没有明确设置了'机器人:在''标签process'属性在清单则服务和活动将在同一虚拟机内的同一进程中运行。这是默认行为。操作系统仍然会单独控制服务和活动,并像往常一样启动和停止它们。如果您想让服务在单独的进程中运行,请在清单中的标记中指定'android:process =“:service”'。这将导致服务在独立于您的应用程序的独立进程中运行。 –

0

的另一大优点是:垃圾收集在一个繁忙的服务不与用户界面的动画干扰。

相关问题