2013-06-05 7 views
8

मैं सूची दृश्यों में अपने ऐप में छवियों को प्रदर्शित करने के लिए यूनिवर्सल छवि लोडर का उपयोग कर रहा हूं। मैं UnlimitedDiscCache का उपयोग कर रहा हूं क्योंकि यह दस्तावेज़ीकरण के अनुसार सबसे तेज़ कैश तंत्र है।सार्वभौमिक छवि लोडर - स्पष्ट कैश मैन्युअल रूप से

हालांकि, मैं जब मेरे एप्लिकेशन बंद हो (onStop() में उदा), लेकिन केवल सबसे पुराने संचित फ़ाइलें कि किसी दिए गए सीमा को पार कर हटा दिया जाना चाहिए डिस्क कैश को साफ़ करना चाहते हैं (जैसे TotalSizeLimitedDiscCache करता है)।

मैं ImageLoader.clearDiscCache() के बारे में पता कर रहा हूँ, लेकिन मेरे मामले में यह पूरा कैश को साफ करता है के बाद से मैं UnlimitedDiscCache से पहले उपयोग कर रहा हूँ ...

तो मैं जब उपयोगकर्ता लोड हो रहा है और listviews स्क्रॉल है सबसे तेजी से कैश तंत्र करना चाहते हैं और धीमी कैश साफ़ करें जब उपयोगकर्ता अब ऐप के साथ सहभागिता नहीं कर रहा है।

कोई विचार मैं इसे कैसे प्राप्त कर सकता हूं?

+0

आप गारंटी नहीं दे सकते कि ऐप रोक रहा है जब 'ऑनस्टॉप()' कहा जाता है। यह केवल इतना कहता है कि वर्तमान गतिविधि रोक दी जा रही है। एक और कैशिंग तंत्र को कार्यान्वित करने में व्यतीत समय की तुलना में प्रदर्शन हानि बहुत कम है (जो ऐप को धीमा कर सकती है)। –

+0

@jeff_bordon क्या आपके पास कोई कोड है जिसका उपयोग ImageLoader उदाहरण बनाने के लिए किया जाता है? @Androidy हां, जब ऐप खत्म होने वाला है, तो आप अलग-अलग हो सकते हैं, जैसे 'if (isFinishing()) {कुछ करें} ' –

+0

@jeff_bordon आप BoB (दोनों में से सर्वश्रेष्ठ) प्राप्त कर सकते हैं। यहां स्रोत देखें https://github.com/nostra13/Android- यूनिवर्सल- छवि- लोडर/ब्लॉब /मास्टर/library/src/com/nostra13/universalimageloader/cache/disc/impl/LimitedAgeDiscCache.java लेखन असीमितएजडिस्क कैश बहुत सीधे आगे हो। आपको बस इतना ही पता होना चाहिए कि अब और उसके बीच की तारीख और अंतर है। मुझे लगता है कि यह सूची दृश्यों की गति को कम नहीं करेगा अगर यह कुछ ifs के मामले में है। –

उत्तर

1

जांच यहां से https://stackoverflow.com/a/7763725/1023248 इस आप मदद कर सकते हैं ..

@Override 
protected void onDestroy() { 
// closing Entire Application 
android.os.Process.killProcess(android.os.Process.myPid()); 
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit(); 
editor.clear(); 
editor.commit(); 
trimCache(this); 
super.onDestroy(); 
} 


public static void trimCache(Context context) { 
try { 
    File dir = context.getCacheDir(); 
    if (dir != null && dir.isDirectory()) { 
     deleteDir(dir); 

    } 
} catch (Exception e) { 
    // TODO: handle exception 
} 
} 


public static boolean deleteDir(File dir) { 
if (dir != null && dir.isDirectory()) { 
    String[] children = dir.list(); 
    for (int i = 0; i < children.length; i++) { 
     boolean success = deleteDir(new File(dir, children[i])); 
     if (!success) { 
      return false; 
     } 
    } 
} 

// <uses-permission 
// android:name="android.permission.CLEAR_APP_CACHE"></uses-permission> 
// The directory is now empty so delete it 

return dir.delete(); 
} 
0

आप स्मृति से संचय साफ़ करना चाहते हैं, तो आप निम्नलिखित कोड का उपयोग कर सकते हैं:

MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache()); 

आप भी चाहते हैं डिस्क में कैश को साफ़ करने के लिए, आप निम्न कोड का उपयोग कर सकते हैं:

DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache()); 

यह एक बहुत आसान तरीका है o कैश साफ़ करने के लिए एफ। आप इस सूत्र में इसी तरह के जवाब मिल सकते हैं:

How to force a cache clearing using Universal Image Loader Android?

मुझे आशा है कि यह जानकारी सहायक रही। :)

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