क्या LinearLayout की तुलना में RelativeLayout अधिक महंगा है?


114

मैं हमेशा से RelativeLayout का उपयोग कर रहा हूँ हर बार मुझे एक व्यू कंटेनर की आवश्यकता होती है, यह लचीलेपन के कारण होता है, भले ही मैं वास्तव में कुछ सरल प्रदर्शित करना चाहता था।

क्या ऐसा करना ठीक है, या मुझे प्रदर्शन / अच्छी प्रथाओं के दृष्टिकोण से, जब मैं कर सकता हूँ, तो एक LinearLayout का उपयोग करने की कोशिश करनी चाहिए?

धन्यवाद!

जवाबों:


149

Google I / O 2013 (Android के लिए कस्टम दृश्य लिखना) में एक चर्चा में, रोमेन गाई ने गलतफहमी को स्पष्ट किया जिसके कारण हर किसी के लिए RelativeLayouts का उपयोग करना शुरू कर दिया। A RelativeLayout को हमेशा दो माप पास करने होते हैं। कुल मिलाकर यह नगण्य है जब तक कि आपका दृष्टिकोण पदानुक्रम सरल है। लेकिन अगर आपका पदानुक्रम जटिल है, तो अतिरिक्त उपाय पास करना संभवतः काफी महंगा हो सकता है। इसके अलावा अगर आप RelativeLayouts को घोंसला देते हैं, तो आपको एक घातीय माप एल्गोरिथ्म मिलता है।

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=1m41s

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=38m04s


8
मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन एकल रिलेटिवआउट और 2-3 लीनियरआउट्स के बीच चयन करते समय आप सबसे कम खर्चीला समाधान क्या मानते हैं?
लैंगकिलर


52

जब तक आप बहुत सारे दृश्य (उदाहरण के लिए एक दृश्य में) नहीं दिखा रहे हैं, LinearLayout या RelativeLayout के बीच चयन करने का प्रदर्शन नगण्य है। जो भी काम के लिए उपयोग करने के लिए सबसे सुविधाजनक है, उठाओ और केवल जब आपको ज़रूरत हो तो प्रदर्शन के बारे में चिंता करें।

और यहाँ क्या कुशल लेआउट बनाने के बारे में आधिकारिक डॉक्स RelativeLayout और LinearLayout के प्रदर्शन के बारे में कहते हैं:

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


3
यह करने के लिए औचित्य नगण्य है? मैंने यह पाया है जो सापेक्षतायत के अनुसार अधिक खर्च करता है जैसा कि मुझे संदेह है bitbucket.org/spencerelliott/mercury/issue/1/…
अधिकतम 4

सिर्फ इनर कंटेनर को जोड़ने से बचें।
लुइस पैना

2

लिनेरलआउट के मुकाबले रिलेटिवलेउट अधिक प्रभावी है।

से यहाँ :

यह एक आम गलत धारणा है कि बुनियादी लेआउट संरचनाओं का उपयोग सबसे कुशल लेआउट की ओर जाता है। हालाँकि, आपके द्वारा जोड़े गए प्रत्येक विजेट और लेआउट को इनिशियलाइज़ेशन, लेआउट और ड्राइंग की आवश्यकता होती है। उदाहरण के लिए, LinearLayout के नेस्टेड इंस्टेंस का उपयोग करने से अत्यधिक गहरा दृश्य पदानुक्रम हो सकता है। इसके अलावा, LinearLayout के कई उदाहरणों का उपयोग करते हुए लेआउट_वेट पैरामीटर का उपयोग करना विशेष रूप से महंगा हो सकता है क्योंकि प्रत्येक बच्चे को दो बार मापा जाना चाहिए। यह विशेष रूप से महत्वपूर्ण है जब लेआउट को बार-बार फुलाया जाता है, जैसे कि सूची दृश्य या ग्रिड दृश्य में उपयोग किया जाता है।


2
@phreakhead आप सही हैं कि कोई एकल "सही" समाधान नहीं है। यही कारण है कि "सही" समाधान लगभग हमेशा प्रदर्शन के बारे में पूरी तरह से भूलने के लिए है और जो कुछ भी लिखना और पढ़ना सबसे आसान है।
केविन क्रुमविडे ने

3
वह बोली आपके कथन का समर्थन नहीं करती है, जो केवल एक स्थिति में सच है
फ़्ल वी वी

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

1

2018 अपडेट: एंड्रॉइड के एन रिलीज में, ConstraintLayoutक्लास समान कार्यक्षमता प्रदान करता है RelativeLayout, लेकिन काफी कम लागत पर। यह बहुत शक्तिशाली लेआउट प्रबंधक है और इसका उपयोग तब किया जाना चाहिए जब भी जटिल जीयूआई बनाने के लिए आवश्यक हो।


नवीनतम संस्करण के बाद से यह बहुत धीमा हो गया
ड्रैगोस राचियेरू

यह इस बात पर निर्भर करता है कि इसका उपयोग कैसे किया जाता है। आपको पूर्ण स्थिति से बचना चाहिए और बाधाओं का उपयोग करना चाहिए।
21

-25

तुम कोशिश कर सकते हो

<LinearLayout>
       <ViewPager/><!--Loading images from net, it is very good as a testing case.-->
       <ViewPagerIndicator/>
       <TextView/> <!--Show some info about page-->
</LinearLayout>

<RelativeLayout>           
       <ViewPager/><!--Loading images from net, it is very good as a testing case.-->
       <ViewPagerIndicator below="id of ViewPager"/>
       <TextView below="id of ViewPagerIndicator"/> <!--Show some info about page-->
</RelativeLayout>

आप पाएंगे कि अगर आपके पेज इंटरनेट से कुछ छवियों को लोड कर रहे हैं, तो बहुत अलग हैं। इस मामले में LinearLayout RelativeLayout से 100% बेहतर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.