6

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

जैसा कि मैं समझता हूं, वेब व्यू को यूआई थ्रेड से छेड़छाड़ की जानी चाहिए जो चीजों को एक बहुत कठिन बनाता है।

कोई भी सुझाव/कामकाज है कि मैं ऐप कैसे प्राप्त कर सकता हूं इस पर ध्यान दिए बिना कि उनके पास ऐप खुला है या नहीं?

उत्तर

6

जबकि वेबव्यू को एक थ्रेड पर छेड़छाड़ की आवश्यकता होती है, तब तक यूआई थ्रेड होने की आवश्यकता नहीं होती है (जब तक कि आप वेब प्यूव को दृश्य पदानुक्रम में संलग्न नहीं करना चाहते), हालांकि इसे सभी के लिए एक ही धागा होना चाहिए WebViews।

हालांकि यह कुछ स्पष्ट रूप से समर्थित नहीं है (या भारी परीक्षण किया गया है) कुछ भी विशेष नहीं है कि WebView आपको किसी सेवा में इसे चलाने से रोकने के लिए करता है। वेबव्यू कॉन्टेक्स्ट पर कुछ विधियों को कॉल करता है जो सामान्य रूप से किसी सेवा में काम नहीं करते हैं (जैसे getTheme()), तो आपको कॉन्टेक्स्टवापर के साथ उस पर काम करना होगा। WebView को आकार देने के लिए आपको आकार देने के लिए आपको WebView.layout मैन्युअल रूप से कॉल करने की आवश्यकता होगी। ऐसी कई चीजें हो सकती हैं जो आपको करने की ज़रूरत होगी, लेकिन कुछ भी दिमाग में नहीं आता है।

+0

यदि आप HTML चयन संवाद के साथ क्रैश कर रहे हैं तो https://code.google.com/p/android-developer-preview/issues/detail?id=359#c7 देखें। –

+2

यह अब सत्य नहीं प्रतीत होता है - ऐसा लगता है जैसे _must_ UI थ्रेड हो। जब मैं किसी अन्य धागे में वेबव्यू बनाने की कोशिश करता हूं तो मुझे मिलता है: "java.lang.RuntimeException: java.lang.Throwable: चेतावनी: थ्रेड 'UtilityWebViewServiceThread' पर एक वेब व्यू विधि को बुलाया गया था। सभी वेब दृश्य विधियों को UI थ्रेड पर कॉल किया जाना चाहिए। वेबव्यू के भविष्य के संस्करण अन्य धागे पर उपयोग का समर्थन नहीं कर सकते हैं। " – David

+0

मेरे लिए काम करना, विशेष रूप से "WebView.layout()" मैन्युअल कॉल। मैं एक intentservice से वेबव्यू बना रहा हूँ, धन्यवाद। – carrizo

2

आपका मतलब है?

runOnUiThread(new Runnable(){ 
     public void run() { 
      ... something 
     } 
    }); 
1

आप पृष्ठभूमि धागे से किसी भी दृश्य को फुला या संशोधित नहीं कर सकते हैं। लेकिन यदि आप किसी वेब पेज की सामग्री चाहते हैं, तो आप इसे HTTP GET का उपयोग करके पृष्ठभूमि थ्रेड में ला सकते हैं। इसके एचटीएमएल डेटा प्राप्त करने के लिए आपको यूआरएल पर जीईटी का उपयोग करने की आवश्यकता है।

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