2012-05-30 27 views
0

我對我的應用程序有許多共享偏好(主要與顏色自定義有關),我不確定在運行時存儲/使用它們的最佳方法。SharedPreferences和應用程序類

目前,我做這樣的事情(有根據的觀點或多或少偏好)在每一個活動/片段:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
int buttonbg = settings.getInt("buttonmenu_bg", 0); 
int buttontxt = settings.getInt("buttonmenu_txt", 0); 
int headerclr = settings.getInt("header", 0); 

,然後使用這些設置在顯示器的各種顏色。這似乎有很多開銷,每次都需要調用PreferenceManager並完成所有操作。

所以我開始尋找創建一個應用程序類,閱讀偏好一次,在活動/片段使用從應用程序類的靜態變量設置顯示。

我的問題是,是否有任何缺點或陷阱,以在此之前我還冒險下來的應用程序類路徑,我應該考慮什麼?

回答

0

Application類的用途是存儲全局應用程序狀態或數據(當然內存),所以你的做法是正確的。我已經多次使用它,它的功能就像一個魅力。

我最常做的是創造一個Map成員變量,併爲獲取並把值到它的方法,看起來是這樣的:

package com.test; 
... 
... 
public class MyApp extends Application{ 

    private Map<String, Object> mData; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mData = new HashMap<String, Object>(); 
    } 

    public Object get(String key){ 
     return mData.get(key); 
    } 
    public void put(String key,Object value){ 
     mData.put(key, value); 
    } 
} 
從我的活動

然後,我只是做((MyApp) getApplication()).get("key")((MyApp) getApplication()).put("key",object)。另外,不要忘記設置您的清單文件中android:name屬性,則application標籤下:

<application 
     ... 
     ... 
     android:name="com.test.MyApp"> 
</application> 
+0

這是正確的,但不應該使用。我在過去的4年中採用了這種方法,但最終檢查起來太多了,因爲過了一段時間垃圾回收器可以刪除數據,並且你陷入了一堆空值。 –

2

如果你沒有使用這麼多的靜態變量,所以這可能不會影響您application.But與靜態變量時可能出現你的應用程序切換到後臺和前端運行的應用程序的問題,需要的內存,因此它可能清除靜態數據,所以當你去你的應用程序時,你可能會發現什麼(空)代替靜態數據。

0

有沒有你爲什麼沒有在res/values/styles.xml設置顯示顏色什麼特別的原因?

+1

顏色「定製」可能意味着他使用顏色選取讓用戶挑選東西的顏色,然後存儲這些共享首選項中的顏色。 – Brayden

+0

沒錯。用戶可以使應用看起來像他們想要的那樣醜陋。 :) – Barak

相關問題