android ConstraintLayout और RelativeLayout के बीच मतभेद




android-layout android-relativelayout (8)

मैं ConstraintLayout और RelativeLayout के बीच के अंतर के बारे में उलझन में हूं। क्या कोई मुझे उनके बीच सटीक अंतर बता सकता है?


@ धवल-जिवानी उत्तर के अलावा।

मैंने प्रोजेक्ट जिथब प्रोजेक्ट को बाधा लेआउट v.1.1.0-beta3 के नवीनतम संस्करण में अद्यतन किया है

मैंने क्रिएट विधि के समय और समय की शुरुआत के साथ तुलना की है और सीपीयू मॉनिटर में दिखाई देने वाली अंतिम प्रीफॉर्म ड्रा विधि के निष्पादन के अंत में समय की शुरुआत की है। एंड्रॉइड 6.0.1 के साथ सैमसंग एस 5 मिनी पर सभी परीक्षण किए गए थे परिणाम:

ताज़ा शुरुआत (एप्लिकेशन लॉन्च के बाद पहली स्क्रीन खोलना)

अंतरंग परिस्थिति

ऑनक्रेट: 123 एमएमएस

अंतिम preformDraw समय - ऑनक्रेट समय: 311.3ms

बाधा लेआउट

ऑनक्रेट: 120.3ms

अंतिम preformDraw समय - ऑनक्रेट समय: 310ms

इसके अलावा, मैंने इस article से प्रदर्शन परीक्षण की जांच की है, यहां कोड और पाया है कि लूप गणना 100 से कम बाधा लेआउट संस्करण को तेज करने, मापने और लेआउट के निष्पादन के दौरान तेज है, फिर संबंधित लेआउट के साथ भिन्नताएं। और एंड्रॉइड 4.3 के साथ सैमसंग एस 3 जैसे पुराने एंड्रॉइड डिवाइस पर, अंतर बड़ा है।

एक निष्कर्ष के रूप में मैं article से टिप्पणियों के साथ सहमत हूं:

क्या रिलेटिव लयआउट या लीनियरलाउट से पुराने विचारों को रीफैक्टर करने के लायक है?

हमेशा के रूप में: यह निर्भर करता है 🙂

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


एंड्रॉइड व्यू ड्राइंग प्रक्रिया में 3 चरण शामिल हैं। ViewGroup विस्तारित करते समय आप संबंधित विधियां पा सकते हैं

  • उपाय
  • ख़ाका
  • खींचना

सिस्ट्रेस टूल का उपयोग करके हम माप / लेआउट की गणना कर सकते हैं

रिलेवेटिवआउट का उपयोग करने वाले लेआउट संस्करण के लिए सिस्ट्रेस

लेआउट संस्करण के लिए सिस्ट्रेस जो ConstraintLayout का उपयोग करता है

प्रदर्शन अंतर ( OnFrameMetricsAvailableListener का उपयोग OnFrameMetricsAvailableListener जो आपको अपने ऐप के यूआई प्रतिपादन के बारे में फ्रेम-दर-फ्रेम समय जानकारी एकत्र करने की अनुमति देता है)

RelreatLayout RelativeLayout की तुलना में माप / लेआउट चरण में लगभग 40% बेहतर प्रदर्शन करता है

और आखिरी लेकिन कम से कम एक ConstraintLayout जिम्मेदार यूआई बनाने का एक आधुनिक तरीका नहीं है, यह लगातार विकासशील होता है, और प्रत्येक रिलीज में अच्छी सुविधाएं होती हैं जो जीवन को और अधिक आसान बनाती हैं। नवीनतम अवरोध लेआउट 1.1 है

कृपया और पढ़ें:

https://constraintlayout.com/

https://android-developers.googleblog.com/2017/08/understanding-performance-benefits-of.html

medium.com/google-developers/…


ConstraintLayout का इरादा घोंसले से बचने के लिए प्रत्येक दृश्य में कुछ नियम लागू करके अपने लेआउट के दृश्य पदानुक्रम को अनुकूलित और फ़्लैट करना है।

नियम आपको रिलेवेटिवआउट की याद दिलाते हैं, उदाहरण के लिए बाएं को किसी अन्य दृश्य के बाईं ओर सेट करना।

app:layout_constraintBottom_toBottomOf="@+id/view1"

RelativeLayout ConstraintLayout विपरीत, ConstraintLayout bias मान प्रदान करता है जिसका उपयोग 0% और 100% क्षैतिज और लंबवत ऑफसेट हैंडल के सापेक्ष (सर्कल के साथ चिह्नित) के संदर्भ में देखने के लिए किया जाता है। ये प्रतिशत (और अंश) विभिन्न स्क्रीन घनत्वों और आकारों में दृश्य की निर्बाध स्थिति प्रदान करते हैं।

app:layout_constraintHorizontal_bias="0.33" <!-- from 0.0 to 1.0 -->
app:layout_constraintVertical_bias="0.53" <!-- from 0.0 to 1.0 -->

बेसलाइन हैंडल (सर्कल हैंडल के नीचे गोलाकार कोनों के साथ लंबी पाइप) का उपयोग किसी अन्य दृश्य संदर्भ के साथ दृश्य की सामग्री को संरेखित करने के लिए किया जाता है।

स्क्वायर हैंडल (दृश्य के प्रत्येक कोने पर) डीपीएस में दृश्य का आकार बदलने के लिए उपयोग किया जाता है।

यह पूरी तरह से राय आधारित है और ConstraintLayout की मेरी धारणा है


पूछने का असली सवाल यह है कि क्या बाधा लेआउट के अलावा किसी अन्य लेआउट का उपयोग करने का कोई कारण है? मेरा मानना ​​है कि जवाब नहीं हो सकता है।

उन लोगों को जोर देने के लिए उनका लक्ष्य नौसिखिया प्रोग्रामर या पसंद है, उन्हें किसी भी अन्य लेआउट से कम होने का कोई कारण प्रदान करना चाहिए।

बाधाएं लेआउट हर तरह से बेहतर होते हैं (वे एपीके आकार में 150k की तरह लागत करते हैं।)। वे तेज़ हैं, वे अधिक सुविधाजनक हैं, वे अधिक लचीले होते हैं, वे परिवर्तनों के लिए बेहतर प्रतिक्रिया देते हैं, जब आइटम दूर जाते हैं तो वे समस्याएं ठीक करते हैं, वे मूल रूप से विभिन्न स्क्रीन प्रकारों के अनुरूप बेहतर होते हैं और वे उस लंबे समय से घोंसला वाले लूप का समूह नहीं उपयोग करते हैं सब कुछ के लिए पेड़ संरचना तैयार किया। आप कहीं भी, कहीं भी, कहीं भी कुछ भी डाल सकते हैं।

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


अंतर / फायदे निम्नलिखित हैं:

1) बाधा लेआउट में रिलेटिव लेआउट के साथ-साथ रैखिक लेआउट दोनों की दोहरी शक्ति है: विचारों की सापेक्ष स्थिति (सापेक्ष लेआउट की तरह) सेट करें और गतिशील यूआई के लिए वजन भी निर्धारित करें (जो रैखिक लेआउट में केवल संभव था)।

2) एक बहुत शक्तिशाली उपयोग एक श्रृंखला बनाकर तत्वों का समूह है। इस तरह हम विचारों का एक समूह बना सकते हैं, जिसे संपूर्ण रूप से दृश्यों के एक और समूह को बनाने के लिए पदानुक्रम की एक और परत जोड़ने के बिना वांछित तरीके से रखा जा सकता है।

3) वजन के अलावा, हम क्षैतिज और ऊर्ध्वाधर पूर्वाग्रह लागू कर सकते हैं जो कि केंद्र से विस्थापन का प्रतिशत नहीं है। (0.5 का पूर्वाग्रह केंद्रीय रूप से गठबंधन होता है। किसी भी मूल्य से कम या अधिक संबंधित दिशा में संबंधित आंदोलन का मतलब है)।

4) एक और बहुत ही महत्वपूर्ण विशेषता यह है कि यह GONE विचारों को संभालने के लिए कार्यक्षमता का सम्मान करता है और प्रदान करता है ताकि कुछ कोड जावा कोड के माध्यम से जाने के लिए सेट किए जाने पर लेआउट न तोड़ें। यहां अधिक पाया जा सकता है: https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html#VisibilityBehavior

5) ब्लू प्रिंट और विजुअल एडिटर टूल के उपयोग से लागू स्वचालित बाधा की शक्ति प्रदान करता है जो किसी पृष्ठ को डिज़ाइन करना आसान बनाता है।

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

जल्दी से सीखने के लिए यहां सबसे अच्छी जगह है: https://codelabs.developers.google.com/codelabs/constraint-layout/#0


आधिकारिक तौर पर, ConstraintLayout बहुत तेज है

ConstraintLayout क्लास RelativeLayout को समान कार्यक्षमता प्रदान करता है, लेकिन काफी कम लागत पर।


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


एक बड़ा अंतर यह है कि यदि दृश्य समाप्त हो गया है तो भी बाधाएं बाधाओं का सम्मान करती हैं। इसलिए यदि आपके पास श्रृंखला है तो यह लेआउट तोड़ नहीं देगा और आप बीच में एक दृश्य गायब होना चाहते हैं।





android-constraintlayout