1. 程式人生 > >Android解決activity、service間使用sharePreference進行值存取不同步

Android解決activity、service間使用sharePreference進行值存取不同步

問題:今天在程式碼中使用sharePreference在activity對值進行存,在service中對值進行取的過程中發現,不能在service正確地取出儲存在sharePreference中的值。

在參考網上諸多關於這個問題的解決方案為:將sharePreference中getSharedPreferences(String name,int mode)中的mode從MODE_APPEND修改為MODE_MULTI_PROCESS。本人親試,無果

真實有效的解決方法:在manifest中在service下去掉process屬性即可。(android:process=":notify123")

原因:在android中同一應用不同程序中,使用sharePreference不能及時傳遞資料,只有在重啟應用後資料才會一致。android:process 是服務所在程序的名字。通常,一個應用的所有元件都執行在系統為這個應用所建立的預設程序中。這個預設程序是用這個應用的包名來命名的。 process屬性可以設定成和所有元件都不同的預設值。但是這些元件可以通過設定自己的process值來覆寫這個預設值,這樣可以讓你的應用跨多程序執行。如果被設定的程序名是以一個冒號開頭的,則這個新的程序對於這個應用來說是私有的,當它被需要或者這個服務需要在新程序中執行的時候,這個新程序將會被建立(如上)。 如果這個程序的名字是以小寫字元開頭的,則這個服務將執行在一個以這個名字命名的全域性的程序中,當然前提是它有相應的許可權。這將允許在不同應用中的各種元件可以共享一個程序,從而減少資源的佔用。

因此,為了使sharePreference能夠在activity和service中及時地共享資料,應該讓他們處於同一個程序中,去掉process屬性就能達到這樣的效果。