2016-04-12 7 views
11

क्या स्थानीय .html फ़ाइल को WebView में लोड करने की गति में सुधार करने का कोई तरीका है। .html फ़ाइलें /assets फ़ोल्डर में संग्रहीत हैं।एंड्रॉइड: वेबव्यू स्थानीय एचटीएमएल फाइलों की लोडिंग गति में सुधार

आप वीडियो में देख सकते हैं (क्षमा करें, लिंक टूटी हुई है!), TextView (लाल beackground) प्रदान की गई है इससे पहले कि transistion, शुरू होता है, जबकि WebView में पाठ बाद में दिखाया गया है। 0Vको टेक्स्टव्यू के रूप में तेज़ी से लोड करने के लिए मैं कैसे प्राप्त कर सकता हूं?

//current implementation 
webView.setInitialScale(1); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setLoadWithOverviewMode(true); 
webView.getSettings().setUseWideViewPort(true); 
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
webView.setScrollbarFadingEnabled(false); 

webView.loadUrl("file:///android_asset/disclaimer.html"); 

सारांश

यह संभव नहीं है। मैंने यहां सभी टिप्पणियों की कोशिश की और इससे कोई फर्क नहीं पड़ता।

कारण मैं पूछता था कि हमारे पास आईओएस और एंड्रॉइड के लिए एक आवेदन था, जिसमें मुख्य रूप से सरल TextViews और Images शामिल थे। तो हमारे पास स्थानीयhtml फ़ाइलों को बनाने का विचार था, जिसे हम दोनों अनुप्रयोगों में उपयोग कर सकते थे। iOS में यह एक आकर्षण की तरह काम करता है, लेकिन Android में हम लोडिंग समय से छुटकारा नहीं पा सके, इसलिए मेरे पास हमेशा एक खाली स्क्रीन थी और सामग्री के 100-200ms के बाद दिखाई देता था।

मुझे लगता है कि गतिविधि दिखाई देने पर एंड्रॉइड WebView प्रतिपादन शुरू होता है। ऑनलाइन मोड में यह पूरी तरह से समझ में आता है, क्योंकि आप वास्तव में उन्हें ध्यान केंद्रित करने से पहले, कई HTML पृष्ठों को लोड करना नहीं चाहते हैं, जो उपयोगकर्ता पृष्ठभूमि में एक नए टैप में खुलता है। हालांकि, ऑफ़लाइन मोड (एप्लिकेशन में संग्रहीत स्थानीय HTML फ़ाइलें assets) यह व्यवहार अनावश्यक है, लेकिन आप इसे बदल नहीं सकते हैं।

अब हम वास्तव में क्यों फोनगैप & सह बेकार है।

बस रिकॉर्ड के लिए: अंत में, मैंने एक खाली LinearLayout कंटेनर के साथ एक गतिविधि का उपयोग किया, जहां आप प्रोग्रामिक रूप से सामग्री सम्मिलित कर सकते थे। प्रत्येक शैली (शीर्षक 1, शीर्षक 2, सामग्री ...) एक स्वयं के लेआउट xml फ़ाइल

public void insertHeadline(int id){ 

    String text = getString(id); 
    TextView headline = (TextView) inflater.inflate(R.layout.layout_text_headline, null, false); 
    headline.setText(text); 

    //add this TextView to the empty container 
    myLinearLayoutContainerView.addView(headline); 

} 

उत्तर

3

वेब दृश्य कभी Rende नहीं किया जा सकता एक टेक्स्टव्यू के रूप में तेज़ी से लाल (जब तक कि आप पाठ की हजारों पंक्तियों को लोड करने जैसे टेक्स्टव्यू का दुरुपयोग नहीं कर रहे हों) इससे कोई फर्क नहीं पड़ता कि आप कितने स्विच चालू/बंद करते हैं और आप कितने अनुकूलन और बदलाव करते हैं। प्रतिपादन तंत्र एक टेक्स्टव्यू का समर्थन करता है क्योंकि यह अधिक सामान्य है कि आप अपनी सामान्य प्रस्तुति में परिवर्तन कैसे निर्दिष्ट कर सकते हैं, क्योंकि एक वेबव्यू बाहरी संसाधनों को लोड कर सकता है, क्योंकि सीएसएस प्रस्तुति को संशोधित करता है, क्योंकि जावास्क्रिप्ट प्रस्तुति को प्रभावित कर सकता है, क्योंकि इसे समर्थन के लिए और अधिक स्मृति और प्रारंभिक आवश्यकताएं हैं इन सभी कार्यों, ...

यह कारण है कि एक phonegap/कॉर्डोबा एप्लिकेशन हमेशा की तरह तेज़ और एक स्थानीय एप्लिकेशन के रूप में इंटरएक्टिव नहीं किया जा सकता है। खैर, जब तक कि मूल ऐप केवल वेबव्यू से बना न हो: पी

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

मुझे लगता है कि आप जो हासिल करना चाहते हैं, वह आपके उपयोगकर्ताओं को अपूर्ण स्क्रीन देखने से रोकता है। आप पेज पर परिभाषित करके अपनी स्क्रीन दिखाने से पहले एक वेबव्यू प्रस्तुत कर सकते हैं लेकिन यह तेजी से लोड नहीं होगा, उपयोगकर्ता को स्क्रीन संक्रमण तक लंबे समय तक इंतजार करना होगा और आपको शायद कताई चक्र की आवश्यकता होगी।

मेरे अनुभव में, जिस तरह से आप कार्यान्वित अपने संक्रमण बेहतर प्रयोक्ता अनुभव है और जब तक आप अपने html सामग्री लोड समय का अनुकूलन करने के प्रयास करने से पहले परिभाषित किया गया है मैं इंतजार करेंगे।

आप पहले से ही वर्तमान अनुभव पहले से ही परेशान कठिन मिल जाए, मैं सभी html सामग्री लेने पर विचार करेंगे/बाहर WebViews।

4

WebView हमेशा लंबे समय तक एक देशी TextView से बार प्रस्तुत करना होगा था। मुझे लगता है कि यह मंच की प्रकृति है लेकिन शायद आप स्क्रीन लोड करने से पहले स्ट्रिंग में एचटीएमएल सामग्री पढ़ने की कोशिश कर सकते हैं (फ़ाइल सिस्टम ऑपरेशन से वेबव्यू से बचने के लिए)। और उसके बाद स्ट्रिंग को सेट करें:

webview.loadDataWithBaseURL("", earlyReadedHtmlString, "text/html", "UTF-8", ""); 

सैद्धांतिक रूप से, यह वेबदृश्य के लिए तेज़ और निष्पक्ष होना चाहिए। एक और तरीका पेज पर समाप्त हो रहा है() और फिर टेक्स्टव्यू दिखाएं। यह एक कामकाज हो सकता है।

5

यह वेब एप्लिकेशन लोड होने पर निर्भर करता है।नीचे दिए गए तरीकों में से कुछ का प्रयास करें:

उच्च प्राथमिकता प्रदान सेट (एपीआई से 18+ हटा दिया गया):

webview.getSettings().setRenderPriority(RenderPriority.HIGH); 

सक्षम/अक्षम हार्डवेयर त्वरण:

if (Build.VERSION.SDK_INT >= 19) { 
// chromium, enable hardware acceleration 
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
} else { 
    // older android version, disable hardware acceleration 
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
} 

कैश को अक्षम करें:

webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
2

आस्तियों का उपयोग करने के लिए धीमी गति से कर रहे हैं क्योंकि वे apk फ़ाइल है, जो अनिवार्य रूप से एक महिमा ज़िप फ़ाइल है के भीतर समाहित कर रहे हैं।

मैं एक स्टार्टअप दिनचर्या कि बस संपत्ति से फाइल लेता है और उन्हें आंतरिक संग्रहण (या बाहरी संग्रहण में लिखते हैं कि अगर वे काफी बड़े हैं और कोई संवेदनशील डेटा लिखेंगे।

एक बार जब आप उन्हें apk का से निकाली गई है संपत्तियों, वे पहुंचने के लिए बहुत तेज हैं।

+0

क्या आप कृपया अन्य संपत्तियों की प्रतिलिपि बनाने के लिए पोस्ट कर सकते हैं? – soommy12

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