2009-08-07 11 views

उत्तर

174

विचार सभी एक ही जीयूआई थ्रेड पर खींचे गए हैं जो सभी उपयोगकर्ता इंटरैक्शन के लिए भी उपयोग किया जाता है।

तो यदि आपको जीयूआई को तेजी से अपडेट करने की आवश्यकता है या यदि प्रतिपादन में बहुत अधिक समय लगता है और उपयोगकर्ता अनुभव को प्रभावित करता है तो SurfaceView का उपयोग करें।

+2

pierr के उत्तर की जांच करें जिसमें अधिक जानकारी है। –

+3

आधिकारिक विवरण उत्तर: http://developer.android.com/guide/topics/graphics/2d-graphics.html –

+0

अब यह इतना आसान नहीं है। Pierr के जवाब की जांच करें; इसमें विस्तृत आर्किटेक्चर दस्तावेज़ (https://source.android.com/devices/graphics/architecture.html) का एक लिंक है, और बताता है कि क्यों कैनवास प्रतिपादन के हार्डवेयर त्वरण कस्टम दृश्यों को बेहतर विकल्प बना सकते हैं। – fadden

40

मुख्य अंतर यह है कि SurfaceView पृष्ठभूमि के पैरों द्वारा खींचा जा सकता है लेकिन Views नहीं कर सकता। SurfaceViews अधिक संसाधनों का उपयोग करें, हालांकि आप उन्हें तब तक उपयोग नहीं करना चाहते हैं जब तक आपको करना न पड़े।

+0

"वे और अधिक संसाधनों का उपयोग हालांकि, ताकि आप उन्हें उपयोग करने के लिए जब तक आप की जरूरत नहीं है चाहता हूँ।" - कौन अधिक संसाधनों का उपयोग करता है? दृश्य या भूतल दृश्य? – Dror

+6

Surfaceview विचारों से अधिक संसाधनों का उपयोग –

+0

@RiteshGune कितना? –

92

कुछ बातें मैं उल्लेख किया गया है:

  • SurfaceViews एक अच्छा प्रतिपादन तंत्र कि धागे हैंडलर (एनीमेशन के लिए अच्छा) का उपयोग किए बिना सतह की सामग्री को अद्यतन करने की अनुमति देता है होते हैं।
  • सतहदृश्य पारदर्शी नहीं हो सकता है, वे केवल दृश्य पदानुक्रम में अन्य तत्वों के पीछे दिखाई दे सकते हैं।
  • मुझे पता चला है कि वे एक दृश्य पर प्रतिपादन की तुलना में एनीमेशन के लिए बहुत तेज हैं।

अधिक जानकारी के लिए (और एक महान उपयोग उदाहरण) एसडीके के उदाहरण अनुभाग में चंद्र लैंडर परियोजना का संदर्भ लें।

+29

एफवाईआई ... एक भूतल दृश्य अब पारदर्शी हो सकता है: http://stackoverflow.com/questions/5391089/how-to-make-surfaceview-transparent – Steve

+4

कितना समय प्रगति करता है! – Ralphleon

+0

@ राल्फफ़ोन: सतह दृश्यों का क्या मतलब है पारदर्शी नहीं हो सकता है? क्या अन्य विचार सतह दृश्य को ओवरलैप कर सकते हैं? उदाहरण के लिए, क्या मैं एक भूतल दृश्य पर एक सूची दृश्य को अस्थायी रूप से प्रदर्शित कर सकता हूं? – Ashwin

62

अपडेट 05/09/2014

ठीक है। हमारे पास official document now. है जो मैंने बेहतर तरीके से उल्लेख किया है।


और पढ़ें विस्तृत विस्तृत here

हां, मुख्य अंतर सतह दृश्य पृष्ठभूमि थ्रेड पर अपडेट किया जा सकता है। हालांकि, आप और अधिक देखभाल कर सकते हैं।

  • SurfaceView सतह बफर समर्पित है, जबकि सभी दृश्य शेयर एक सतह बफर कि ViewRoot द्वारा आवंटित किया जाता है। दूसरे शब्द में, सतही दृश्य को अधिक संसाधनों की लागत है।

  • सतह दृश्य हार्डवेयर त्वरण (जेबी 4.2 के रूप में) नहीं हो सकता है, जबकि सामान्य दृश्य पर 95% संचालन ओपनजीएल ईएस का उपयोग करके एचडब्ल्यू त्वरित हो जाता है।

  • अपनी अनुकूलित सतह दृश्य बनाने के लिए और अधिक काम किया जाना चाहिए। आपको सतह पर श्रोता बनाने की आवश्यकता है क्रेटेड/नष्ट घटना, एक रेंडर थ्रेड बनाएं, अधिक महत्वपूर्ण बात, रेंडर थ्रेड और मुख्य थ्रेड सिंक्रनाइज़ करें। हालांकि, दृश्य को कस्टमाइज़ करने के लिए, आपको केवल onDraw विधि ओवरराइड करना है।

  • अद्यतन करने का समय अलग है। सामान्य दृश्य अद्यतन तंत्र ढांचे द्वारा नियंत्रित या नियंत्रित होता है: आप यूआई थ्रेड में view.invalidate या view.postInvalid को अन्य थ्रेड में कॉल करने के लिए इंगित करते हैं ताकि दृश्य को अद्यतन किया जाना चाहिए। हालांकि, दृश्य तुरंत अपडेट नहीं किया जाएगा, लेकिन अगले VSYNC ईवेंट आने तक प्रतीक्षा करें। वीवाईएसएनसी को समझने का आसान तरीका यह मानना ​​है कि यह एक टाइमर है जो 60fps स्क्रीन के लिए हर 16ms को आग लगा देता है।एंड्रॉइड में, सभी सामान्य दृश्य अपडेट (और वास्तव में प्रदर्शित करते हैं लेकिन मैं आज बात नहीं करूंगा), बेहतर चिकनीता प्राप्त करने के लिए वीएसवाईएनसी के साथ सिंक्रनाइज़ किया गया है। अब, सतह दृश्य पर वापस, आप इसे जितनी चाहें उतनी बार प्रस्तुत कर सकते हैं। हालांकि, मैं शायद ही यह बता सकता हूं कि यह एक लाभ है, क्योंकि प्रदर्शन पहले भी बताए गए वीएसएनसी के साथ सिंक्रनाइज़ किया गया है।
+1

आपके उत्तर से मुझे लगता है कि SurfaceView से व्यू से व्युत्पन्न कक्षा का उपयोग करना बेहतर है। या मुझे कुछ गलत मिल रहा है? यह 2 डी गेम विकास ट्यूटोरियल के बहुमत का विरोध करेगा। – Storm

+2

@ कुछ समझने के लिए स्टॉर्म यह है कि डिज़ाइन द्वारा एक भूतल दृश्य को यूआई थ्रेड को अवरुद्ध नहीं करना चाहिए जहां एक दृश्य केवल यूआई थ्रेड द्वारा संशोधित किया जा सकता है। अधिकांश खेलों के साथ, SurfaceViews प्रतिपादन का एक अच्छा हिस्सा कर रहे हैं जो एक साधारण दृश्य के साथ यूआई थ्रेड को अवरुद्ध करेगा। SurfaceView की मेरी समझ से, यह प्राथमिक लाभ है। – zgc7009

9

SurfaceView एंड्रॉइड में एक कस्टम दृश्य है जिसका उपयोग इसके अंदर खींचा जा सकता है।

View और SurfaceView के बीच मुख्य अंतर यह है कि एक दृश्य UI Thread में खींचा गया है, जिसका उपयोग सभी उपयोगकर्ता इंटरैक्शन के लिए किया जाता है।

यदि आप यूआई को तेजी से पर्याप्त अपडेट करना चाहते हैं और में अच्छी मात्रा में जानकारी प्रदान करना चाहते हैं, तो SurfaceView एक बेहतर विकल्प है।

लेकिन वहाँ SurfaceView करने के लिए कुछ तकनीकी अंदर हैं:

1. वे हार्डवेयर त्वरित नहीं हैं।

2. सामान्य विचारों गाया जाता है जब आप कॉल तरीकों invalidate या postInvalidate(), लेकिन इसका मतलब यह नहीं है दृश्य तुरंत अपडेट (ए VSYNC भेजे जाएँगे हो जाएगा, और ओएस का फैसला करता है जब यह अद्यतन हो जाता है। SurfaceView तुरंत अद्यतन किया जा सकता

3. एक SurfaceView एक आवंटित किया है surface buffer, तो यह अधिक महंगा है

0

एक अन्य परिभाषा होगा:।

एक SurfaceView एक विशेष दृश्य है जो आपको सीधे स्क्रीन पर सामग्री प्रस्तुत करने देता है।

स्रोत: बिग बेवकूफ Ranch गाइड

4

SurfaceView और दृश्य के बीच मुख्य अंतर यह है कि एक सामान्य दृश्य हम जहां दृश्य है एक ही धागे से विधि अमान्य कॉल करनी होगी के लिए स्क्रीन ताज़ा करने के लिए है परिभाषित। लेकिन अगर हम अमान्य कहते हैं, तो ताज़ा तुरंत नहीं होता है। यह केवल वीएसवाईएनसी सिग्नल के अगले आगमन के बाद होता है। वीएसवाईएनसी सिग्नल एक कर्नेल जेनरेट सिग्नल है जो हर 16.6 एमएस होता है या इसे 60 फ्रेम प्रति सेकेंड के रूप में भी जाना जाता है। इसलिए यदि हम स्क्रीन के ताज़ा करने पर अधिक नियंत्रण चाहते हैं (उदाहरण के लिए बहुत तेज गतिशील एनीमेशन के लिए), तो हमें सामान्य दृश्य वर्ग का उपयोग नहीं करना चाहिए।

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

https://youtu.be/kRqsoApOr9U

https://youtu.be/Ji84HJ85FIQ

https://youtu.be/U8igPoyrUf8

+0

कोई वीडियो नहीं मिला !! –

+0

सही ....... –

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