2012-11-08 145 views
1

我試圖找到關於此問題的解釋,但找不到任何東西。活動和服務之間的偏好

我有一個在後臺工作的遠程服務。該服務從SharedPreference中讀取一些首選項。

我從PreferenceActivity(活動和服務屬於相同的應用程序和相同的包)更改首選項時發生問題。我更改了首選項並將其正確保存,但只要服務讀取該首選項(服務從不修改首選項,它只會修改某些不能從PreferenceActivity修改的內部首選項),首選項將被「重置」,並且服務獲取重置的值。

CheckBoxPreference發生這種情況。我不知道這是否會出現其他類型的偏好,因爲我沒有任何其他偏好。

當我更改首選項後,我應該重新啓動服務?或者我需要「刷新」服務中的偏好設置?也許這是與使用HoloEverywhere相關的問題?

爲了得到我用下面的代碼SharedPreference對象:

PreferenceManager.wrap(context, getSharedPreferencesName(context), Context.MODE_MULTI_PROCESS); 

此代碼是特定於HoloEverywhere,它等於這個:

context.getSharedPreferences(getSharedPreferencesName(上下文),Context.MODE_MULTI_PROCESS) ;

'getSharedPreferencesName()'只返回由「package.name_preferences」組成的字符串。

謝謝。

回答

3

我有一個在後臺工作的遠程服務。

你爲什麼讓你的服務偏遠?

我改變偏好,它被正確保存,但只要服務讀取偏好(服務永遠不改變的喜好,它只是修改不能從PreferenceActivity修改了一些內部偏好)則優先'重置'並且服務獲得重置的值。

那是因爲你讓你的服務偏遠。只需從清單中刪除android:process屬性,讓所有組件在同一個進程中運行,並且此問題將消失。一路上,你會讓用戶更快樂,因爲你不會消耗更多的RAM和電池。

當我更改首選項後,我應該重新啓動服務?或者我需要「刷新」服務中的偏好設置?

如果你真的有一個合法的理由有一個遠程服務 - 恕我直言,我更有可能自發地再生我的頭髮 - 你將需要重新啓動服務的過程,AFAIK。每個進程緩存SharedPreferences,我不知道如何強制Android從磁盤重新加載SharedPreferences,除非重新啓動進程。

或者,您不能有遠程服務。這是你的選擇。

+0

我需要使用遠程服務,因爲此服務必須在後臺監聽新照相機的照片並自動上傳。感謝您的回覆。 –