2013-10-31 19 views
2

我的共享首選項的定義是這樣的:多進程共享偏好返回多進程環境錯誤值

sharedPreferences = context.getSharedPreferences(Consts.SHARED_PREFS_NAME, Context.MODE_MULTI_PROCESS); 

我的接收器在不同的過程中定義:

<receiver android:name="com.my.name" android:enabled="true" android:process=":myProcessName" /> 

使用的工藝是不同的而這些情況也是不同的。 問題是,在應用程序進程和我的broadcastreceiver進程中使用相同的布爾首選項會返回意外的值,就像讀取和寫入不在相同的共享布爾首選項中一樣。

任何想法?

回答

0

好的,終於明白了。問題的基礎是將sharedPreferences保存在一個靜態變量中。

雖然sharedPrefs在MODE_MULTI_PROCESS中同步多進程讀取和寫入,但持有我的sharedPrefs實例的靜態變量未正確更新。

這是一個稍微昂貴的操作,但每次讀取數據時調用sharePrefs的新實例都很有幫助。

更新:不幸的是,由於這個問題的結果不一致,所以上述「解決方案」實際上根本就不是解決方案。

+0

那麼什麼是完美的解決方案? – Piyush

+0

您是否找到解決方案? – Lichtamberg

1

我寫了一個庫來解決此問題:https://github.com/grandcentrix/tray

它使用一個內部的ContentProvider來存儲數據,是對SharedPreferences但多進程的支持完全替代。

+0

謝謝!我親自親自那樣做。 :) – domenukk