2014-01-24 15 views
3

讓我們想象一下,如果首選項選項設置爲true,我們只想執行某些操作。這可能是形勢的類圖:Android的最佳設計實踐與Java不同?

class diagram

getDoSomethingOptionValue()PreferencesActivity實現可能如下:

public boolean getDoSomethingOptionValue(){ 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity() 
    return settings.getString("doSomethingOptionValue", "false"); 
} 

在Java(我的意思是,沒有Android),MainActivity應該使用get方法從PreferencesActivity來獲取值:

if (PreferencesActivity.getDoSomethingOptionValue()){ 
    // TODO  
    executeSomething() 
} 

但它實際上是更復雜的Android(我喜歡this tutorial about how to communicate two running activities)進行交流活動。 因此,我被邀請直接從MainActivity檢查首選項。代碼會更簡單,更有效率。它可能是這樣的:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity() 
if (settings.getString("doSomethingOptionValue", "false"){ 
    // TODO  
    executeSomething() 
} 

哪一個是Android的推薦做法?

+0

PreferencesActivity.getDoSomethingOptionValue()將無法正常工作的方法也不是一成不變的 – s1m3n

+0

我們通過使用PreferenceHandler,負責所有共享的喜好和所有設置解決了這一/獲取越過它,並可以通過訪問應用程序在應用程序中無處不在 – for3st

回答

0
  1. 的「不重複自己」原則仍然適用,即,如果您使用相同的代碼從兩個位置,它的因素伸到的常用方法。一個例子是在Settings類的靜態方法:(當然,更復雜的選項(非靜態方法,設置通過依賴注入對象中可用)是可能的,如果你的項目需要它)

    public class Settings { 
        public static boolean getDoSomethingOptionValue(Context context) { 
         SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 
         return settings.getString("doSomethingOptionValue", "false"); 
        } 
    } 
    

  2. 您不應該需要在您的PreferencesActivity中手動讀取設置,addPreferencesFromResource可以爲您做到這一點。

+0

你在哪裏推薦使用常用方法?它可能是一項活動嗎? (考慮到該方法會做一些事情,而不會向用戶顯示界面)。它必須是服務嗎? @ for3st說了一些關於處理程序的東西;我猜他在思考AsyncTask。 – chelder

+0

@chelder:我認爲一個普通的舊Java類將會很好。 – Heinzi