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

的另一大優點是:垃圾收集在一個繁忙的服務不與用戶界面的動畫干擾。

相關問題