2015-04-30 52 views
-1

我嘗試使用SharedPreferences,但我不明白爲什麼我們需要上下文。爲什麼SharedPreferences使用上下文?

如果我用我的主要活動的上下文創建SharedPreferences,我可以用另一個上下文獲得某些東西嗎?

例如與intentService類

由於

+2

請不要在此處詢問這種類型的無意義問題。在_Google_ –

+1

上搜索我正在投票結束這個問題,因爲這是一個無意義的問題。 –

+1

@DerGolem我和你在一起。 –

回答

4

IntentService一個是Context一個子類(就像是ActivityApplication,及其他許多Android類)。所以當然你可以從IntentService創建一個SharedPreferences。它會看到與應用程序中的任何Activity或其他Context相同的SharedPreferences值。 (這就是爲什麼它被稱爲共享。)您只需確保在一個上下文中在首選項編輯器中對apply()commit()所做的更改在其他位置可以看到更改。這全部覆蓋在the docs

+0

感謝您的幫助!隨着你的回答,我更瞭解上下文和SharedPreference。這非常有幫助! –

1

看着Android Source Code。你會了解這方面階級內部維護,以便快速訪問共享偏好的靜態HashMap中:

private static final HashMap<String, SharedPreferencesImpl> sSharedPrefs = 
     new HashMap<String, SharedPreferencesImpl>(); 

所以,你可以從任何類得到SharedPreferences像Intent ServiceActivity等延伸Context,它總是會返回相同的對象,如果給予相同的名稱。

注:IntentService確實,如果你追溯鏈延長語境:

IntentService extends Service 
Service extends ContextWrapper 
ContextWrapper extends Context 
1

是的,這是無感的問題,但無論如何。 正如您所知SharedPreference.It用於存儲專用原始數據。

這裏是私人數據條款。這意味着這些數據存儲在應用程序的存儲路徑中。這是data/data/yourpackageName/shared_prefs

所以要訪問您的應用程序的存儲,SharePreference需要您的任何運行Activity的活動上下文。

0

SharedPreferences被讀取並保存到磁盤。

因此,該類需要知道應用程序的位置 - 並且唯一的方法是通過上下文知道該應用程序的位置。

在標準Java中有全局(靜態)對象,因此您可以像System.getProperty(「user.home」)那樣訪問用戶的主目錄。該系統並未在Android中維護 - 在Android中,您需要使用上下文才能訪問應用程序的主目錄

相關問題