दिलचस्प पोस्ट
वर्तमान में जावा में चल रहे सभी थ्रेडों की एक सूची प्राप्त करें एसक्यूएल, संख्या की सहायक तालिका हाइबरनेट वैलिएटर (JSR 303) के साथ क्रॉस फील्ड मान्यता तैयार कथन में वाइल्डकार्ड का उपयोग करना – MySQLi रूक्रिप्ट: निष्पादन स्क्रिप्ट का पथ निर्धारित करें ऑब्जेक्ट मेमोरी एड्रेस एक्सेस करना आर लाइब्रेरी स्रोतों को संपादित और डिबग कैसे करें Opensl के साथ स्व-हस्ताक्षरित प्रमाण पत्र कैसे बनाएं? PHP के साथ एक बयान में एकाधिक SQL क्वेरी निष्पादित करना जावास्क्रिप्ट के साथ एक स्ट्रिंग से फ़ंक्शन बनाने का कोई तरीका है? कैसे JSON को DOM नोड को क्रमबद्ध करने के लिए यहां तक ​​कि परिपत्र संदर्भ हैं? पायथन में बड़ी फ़ाइलों के MD5 हैश प्राप्त करें IOS 5 के साथ armv6 और armv7 आर्किटेक्चर के लिए कैसे बनाया जाए सामग्री डिजाइन स्टाइल चेतावनी संवाद नहीं जावा यादृच्छिक नंबर एक बीज का उपयोग कर

एंड्रॉइड वेबदृश्य – पूरी तरह से कैश साफ़ करें

मेरे पास मेरी गतिविधियों में से एक में एक WebView है, और जब यह वेबपृष्ठ को लोड करता है, तो पृष्ठ फेसबुक से कुछ पृष्ठभूमि डेटा एकत्र करता है

हालांकि मैं क्या देख रहा / रही हूं, एप्लिकेशन में प्रदर्शित पृष्ठ प्रत्येक बार ऐप खोला और रिफ्रेश किया जाता है।

मैंने WebView को कैश का उपयोग नहीं करने और WebView के कैश और इतिहास को साफ़ करने के लिए सेट करने का प्रयास किया है।

मैंने यहां सुझाव का भी पालन किया है: WebView के लिए कैश कैसे रिक्त करें?

लेकिन इनमें से कोई भी काम नहीं करता है, किसी का भी कोई विचार है कि मैं इस समस्या को दूर कर सकता हूं क्योंकि यह मेरे आवेदन का एक महत्वपूर्ण हिस्सा है।

mWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { if(progress >= 100) { mProgressBar.setVisibility(ProgressBar.INVISIBLE); } else { mProgressBar.setVisibility(ProgressBar.VISIBLE); } } }); mWebView.setWebViewClient(new SignInFBWebViewClient(mUIHandler)); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.clearHistory(); mWebView.clearFormData(); mWebView.clearCache(true); WebSettings webSettings = mWebView.getSettings(); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); Time time = new Time(); time.setToNow(); mWebView.loadUrl(mSocialProxy.getSignInURL()+"?time="+time.format("%Y%m%d%H%M%S")); 

इसलिए मैंने पहला सुझाव कार्यान्वित किया (हालांकि कोड को रिकर्सिव होने के लिए बदल दिया गया)

 private void clearApplicationCache() { File dir = getCacheDir(); if(dir!= null && dir.isDirectory()) { try { ArrayList<File> stack = new ArrayList<File>(); // Initialise the list File[] children = dir.listFiles(); for(File child:children) { stack.add(child); } while(stack.size() > 0) { Log.v(TAG, LOG_START+"Clearing the stack - " + stack.size()); File f = stack.get(stack.size() - 1); if(f.isDirectory() == true) { boolean empty = f.delete(); if(empty == false) { File[] files = f.listFiles(); if(files.length != 0) { for(File tmp:files) { stack.add(tmp); } } } else { stack.remove(stack.size() - 1); } } else { f.delete(); stack.remove(stack.size() - 1); } } } catch(Exception e) { Log.e(TAG, LOG_START+"Failed to clean the cache"); } } } 

हालांकि यह अभी भी बदल नहीं गया है कि पृष्ठ क्या प्रदर्शित हो रहा है। मेरे डेस्कटॉप ब्राउज़र पर मुझे वेबव्यू में उत्पादित वेब पेज पर अलग-अलग HTML कोड मिल रहा है, इसलिए मुझे पता है कि वेबविय को कहीं कैशिंग होना चाहिए।

आईआरसी चैनल पर मुझे यूआरएल कनेक्शन से कैशिंग को हटाने के लिए एक फिक्स की ओर इशारा किया गया था लेकिन यह अभी तक एक वेब वीव्यू में कैसे लागू नहीं कर सकता है।

http://www.androidsnippets.org/snippets/45/

अगर मैं अपना आवेदन हटाता हूं और उसे फिर से स्थापित कर देता हूं, तो मैं वेबपेज बैकअप अप टू डेट, यानी एक गैर-कैश्ड संस्करण प्राप्त कर सकता हूं। मुख्य समस्या यह है कि वेबपेज में लिंक्स में बदलाव किए गए हैं, इसलिए वेबपेज का फ्रंट एंड पूरी तरह से अपरिवर्तित है।

वेब के समाधान से एकत्रित समाधान "एंड्रॉइड वेबदृश्य – पूरी तरह से कैश साफ़ करें"

गॉट फेस द्वारा पोस्ट किया गया संपादित कोड स्निपेट में एक त्रुटि शामिल है, यदि एक निर्देशिका को मिटाने में विफल रहता है क्योंकि इसकी एक फाइल को हटाया नहीं जा सकता, तो कोड अनंत लूप में पुन: प्रयास करना जारी रखेगा। मैं इसे पुनः पुनरावर्ती होने के लिए दोबारा लिखता हूं, और एक numdeays पैरामीटर जोड़ता है ताकि आप यह नियंत्रित कर सकें कि फाइल कितनी पुरानी होनी चाहिए, जो कटौती की गई है:

 //helper method for clearCache() , recursive //returns number of deleted files static int clearCacheFolder(final File dir, final int numDays) { int deletedFiles = 0; if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listFiles()) { //first delete subdirectories recursively if (child.isDirectory()) { deletedFiles += clearCacheFolder(child, numDays); } //then delete the files and subdirectories in this dir //only empty directories can be deleted, so subdirs have been done first if (child.lastModified() < new Date().getTime() - numDays * DateUtils.DAY_IN_MILLIS) { if (child.delete()) { deletedFiles++; } } } } catch(Exception e) { Log.e(TAG, String.format("Failed to clean the cache, error %s", e.getMessage())); } } return deletedFiles; } /* * Delete the files older than numDays days from the application cache * 0 means all files. */ public static void clearCache(final Context context, final int numDays) { Log.i(TAG, String.format("Starting cache prune, deleting files older than %d days", numDays)); int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays); Log.i(TAG, String.format("Cache pruning completed, %d files deleted", numDeletedFiles)); } 

अन्य लोगों के लिए प्रयोग की उम्मीद 🙂

मुझे कैश साफ़ करने के लिए एक भी सुरुचिपूर्ण और सरल समाधान मिला

 WebView obj; obj.clearCache(true); 

http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29

मैं कैश को साफ करने का तरीका निकालने का प्रयास कर रहा हूं, लेकिन उपरोक्त विधियों से हम सभी कर सकते हैं स्थानीय फाइलों को हटाते हैं, लेकिन यह रैम को कभी भी साफ नहीं करता है

एपीआई स्पष्टकैच, वेबव्यू द्वारा इस्तेमाल की गई रैम को मुक्त करता है और इसलिए यह जरूरी है कि वेबपेज फिर से लोड किया जाए।

मैंने पाया कि आप जिस फिक्स को देख रहे थे:

 context.deleteDatabase("webview.db"); context.deleteDatabase("webviewCache.db"); 

कुछ कारणों से, एंड्रॉइड यूआरएल के खराब कैश को बनाता है जो इसे नए डेटा की आवश्यकता के बजाय दुर्घटना से वापस करता है। बेशक, आप बस डीबी से प्रविष्टियों को हटा सकते हैं लेकिन मेरे मामले में मैं केवल एक यूआरएल का उपयोग करने की कोशिश कर रहा हूं ताकि पूरे डीबी को उड़ाना आसान हो।

और चिंता न करें, ये डीबी सिर्फ आपके ऐप से जुड़े हैं ताकि आप पूरे फोन की कैश को नहीं हटा रहे हों।

जब आप अपने ऐप को साइन आउट करते हैं, तो सभी वेबव्यू कैश को साफ़ करने के लिए:

 CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); 

Lollypop और इसके बाद के संस्करण के लिए:

 removeAllCookies(ValueCallback) 

यह आपके एप्लिकेशन कैश को साफ़ करना चाहिए, जहां होना चाहिए, जहां आपकी वेबव्यू कैश है

 File dir = getActivity().getCacheDir(); if (dir != null && dir.isDirectory()) { try { File[] children = dir.listFiles(); if (children.length > 0) { for (int i = 0; i < children.length; i++) { File[] temp = children[i].listFiles(); for (int x = 0; x < temp.length; x++) { temp[x].delete(); } } } } catch (Exception e) { Log.e("Cache", "failed cache clean"); } } 

इतिहास को साफ करने के लिए, बस करें:

 this.appView.clearHistory(); 

स्रोत: http://developer.android.com/reference/android/webkit/WebView.html

इनपुट फ़ील्ड पर क्लिक करते समय सुनिश्चित करें कि आप फॉर्म डेटा के लिए विधि का उपयोग नीचे दिए गए ऑप्शन के रूप में प्रदर्शित नहीं किए गए हैं।

 getSettings().setSaveFormData(false);