2013-03-19 8 views
6

मुझे एक वरीयता है जो उपयोगकर्ता द्वारा एक बटन पर क्लिक करने पर मेरा ऐप ध्वनि बजाता है या नहीं (जो अक्सर किया जाता है, कैलकुलेटर के बारे में सोचें)।पढ़ना/लिखना प्राथमिकताएं एक महंगी ऑपरेशन है?

private void playButtonClickSound() { 
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(parentActivity); 
    boolean sounds = sharedPrefs.getBoolean("prefSounds", false); 
    if (sounds) { 
     // blah 
    } 
} 

मैं सोच रहा था कि पढ़ने प्राथमिकताएं महंगा आपरेशन (किसी I/O संचालन के समान है क्योंकि वरीयताओं कायम कर रहे हैं) हो सकता है और उस के बाद से: हर बार जब उपयोगकर्ता बटन निम्न विधि कहा जाता है पर क्लिक करता है उपयोगकर्ता क्लिक बटन इतनी बार ऐसा करने के लिए यह एक बुरा विचार हो सकता है।

सामान्य रूप से वरीयताओं को अक्सर पढ़ने/लिखना बुरा विचार है? यदि हां, तो क्या कोई और तरीका हो सकता है जैसे कोई वरीयता बदलते समय अधिसूचित होने के लिए प्राथमिकता परिवर्तन श्रोता पंजीकृत करना?

उत्तर

5

सचमुच मैं यूआई थ्रेड पर मेरा पूरा करता हूं, चाहे मुझे चाहिए या नहीं, और मैंने कभी धीमे उपकरणों पर भी थोड़ी सी हिचकिचाहट नहीं देखी है। यह बहुत तेज़ है। उस ने कहा, यह I/O है, इसलिए यह असीमित रूप से कर रहा है निश्चित रूप से खराब चीज़ नहीं होगी। लिखने के लिए, यदि आप एपीआई 9 और ऊपर लक्षित कर रहे हैं, तो आप apply() का उपयोग commit() के बजाय कर सकते हैं जो आपके लिए असीमित रूप से करता है।

एक प्राथमिकता परिवर्तन श्रोता पर अपने प्रश्न के लिए के रूप में, हाँ आपको लगता है कि रूप में अच्छी तरह कर सकते हैं:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
prefs.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() { 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { 
     if("my_preference_key".equals(key) { 
      //Handle it here 
     } 
    } 
} 
+1

बढ़िया है कि मैं इसे भविष्य में कैसे करूँगा। :) –

0

आप जावा संदर्भों का उपयोग कर स्मृति कैश में कार्यान्वित कर सकते हैं। आप निम्नलिखित

public boolean getMySound(){ 
    boolean sound=getFromMemory(); 
    if (!sound){//if not available 
      //lets load from shared preferences 
    sound=getSoundFromPreference(); 
     // update memory cache so next time i will load from memory 
    addToMemory(sound); 
    } 
    return sound; 
} 

यह I/O ऑपरेशन की संख्या को कम करेगा।

+0

मैं बात की है कि सटीक तरह करने के बारे में सोच रहा था! –

संबंधित मुद्दे