2011-03-21 77 views
2

我有一個應用程序,我將信息數據存儲在sharedPreference中 我想創建一個靜態類,它將保存來自sharedPreference(get和set)的數據,因此我不必每次都調用sharedPreference(性能問題) 靜態助手類不具有對sharedPreference的引用,是否有任何方法可以在不傳遞調用活動作爲參數的情況下獲取它? 也許getParent()?或getContext()?sharedPreference from助手類

回答

4

我認爲你有2種方法來做到這一點:

  • 你可以在你的所有靜態方法的參數傳遞一個Context。然後只需使用context.getSharedPreferences()

  • 創建一個靜態的init方法,將您的SharedPreferences的數據記錄到您班級的靜態字段中。

對於我的角度來說,我更喜歡N°1,因爲在N°2你必須調用init,每次修改它,你在SharedPreferences

1

考慮實施一個Singleton類用於此目的。我不確定sharedpreference是否存在性能問題。

用一個單獨的類,你可以存儲對象相比,共享偏好(串)。

+0

我看到了由getter/setter方法直接訪問共享偏好沒有任何問題了。 – ernazm 2011-03-21 11:43:47

+0

SharedPreferences實際上是一個Singleton類,當您調用getSharedPreferences時,您實際上只會獲得一個實例,並且在獲得共享首選項的調用數量方面不存在性能損失 – Coderji 2016-04-28 21:42:34

0

添加新的數據你會以某種方式必須通過Context到您的靜態類,最好是應用程序上下文。我建議你重寫Application類(你會需要它的子類),並在靜態類中的上下文引用從那裏設置getApplicationContext()onCreate()方法。這樣,您可以從任何其他應用程序組件(ActivityService,...)訪問共享首選項訪問器,而無需每次都提供Context

+0

您永遠不想保留對Activity的靜態引用。這將是創建一個可怕的內存泄漏的好方法。您可以使用context.getApplicationContext()創建一個到ApplicationContext的靜態引用; – 2012-09-12 00:26:54

+0

......這正是我所說的。 – user634618 2012-09-12 09:41:14

1

另一種方式是寫自己的MyApplication extends Application,在那裏你可以存儲任何你在整個應用程序的範圍要和定義任何你想要的「靜態」的方法。您可以通過(MyApplication)yourActivityInstance.getApplication()訪問它。

0

這是有點晚了,但這裏有一個簡單的方法,我創建。

而不是每次創建自己的SharedPreferences幫助類每個項目你可以使用這個開源庫我創建並使生活更簡單。

Android-SharedPreferences-Helper

添加這種依賴,並開始:

dependencies { 
    ... 
    ... 
    compile(group: 'com.viralypatel.sharedpreferenceshelper', name: 'library', version: '1.1.0', ext: 'aar') 
} 

使用

檢查庫頁有關使用高級功能的詳細信息。