टुकड़ा या समर्थन टुकड़ा?


125

मैं एक ऐप विकसित कर रहा हूं जो Android> = 4.0 का समर्थन करता है। यह android.appपैकेज से टुकड़ों का उपयोग करता है । जैसा कि मैंने 4.0 में पुराने टुकड़ा कार्यान्वयन, जैसे के साथ समस्याओं का सामना करना पड़ रहा इस एक कि पहले से ही समर्थन पुस्तकालय में तय कर रहे हैं, मैं समर्थन पुस्तकालय से टुकड़ा कार्यान्वयन पर वापस जाने के लिए एक और अधिक विश्वसनीय और लगातार कार्यान्वयन प्राप्त करने के लिए विचार कर रहा हूँ।

इस पर आपकी क्या राय है? एंड्रॉइड 4 के लिए विकसित होने पर, क्या आप पहले से ही उपलब्ध होने के बावजूद, समर्थन लाइब्रेरी से टुकड़ों का उपयोग कर रहे हैं?


2
यह एक अच्छा सवाल है (+1 क्योंकि यह मुझे उत्सुक बनाता है)। इसके अलावा इसके लिए वेब पर एक अच्छी व्याख्या नहीं है। मैं अपने ऐप के लिए सपोर्ट लाइब्रेरी का उपयोग कर रहा हूं और मुझे आश्चर्य है कि अगर मैं गलत हूं या नहीं, क्योंकि मैंने परीक्षण के दौरान या परीक्षण के दौरान कोई त्रुटि नहीं देखी।
JJ86

2
@animuson प्रतिभाशाली व्यक्ति का जवाब यह साबित करता है कि यह मुख्य रूप से राय आधारित जवाब नहीं है।
वनवर्ल्ड

जवाबों:


90

मेरे अनुभव से, सभी Android उपकरणों पर एक ही टुकड़े के कार्यान्वयन का उपयोग करना एक महान लाभ है। मैं सभी NullPointerException से छुटकारा नहीं पा सका जब राज्य को एंड्रॉइड 4.0 पर देशी टुकड़ों का उपयोग करके बचाया जाता है, तो समर्थन पुस्तकालय के साथ वे सभी चले गए हैं। इसके अलावा मैं इस दृष्टिकोण के साथ अब तक कोई नुकसान नहीं देख सकता था।

तो मेरे अपने सवाल का जवाब अब है: जब एंड्रॉइड 4.x के लिए विकसित हो रहा है, तो समर्थन लाइब्रेरी से टुकड़ों का उपयोग करना एक अच्छा विचार है। समर्थन लाइब्रेरी में बग्स होते हैं जो अभी भी पुराने टुकड़ा कार्यान्वयन में मौजूद हैं और अक्सर अधिक बग फिक्स के साथ अपडेट किए जाते हैं।


11
तो उस समय का उद्देश्य क्या है android.app.Fragment? यदि आप इसे थोड़ा और स्पष्टीकरण के साथ यहां अपने उत्तर में जोड़ सकते हैं , तो मैं पूरी तरह से संतुष्ट हो जाऊंगा। धन्यवाद!
जोंस्टाफ

1
@jonstaff कारण शायद ऐतिहासिक है। कृपया मेरा अद्यतन उत्तर देखें।
दीप्तिमान

11
पूर्णता के लिए, ऐसा प्रतीत होता है कि ऐसी चीजें हैं जिनका समर्थन टुकड़े नहीं कर सकते हैं (जैसे कि वास्तविक लक्ष्य OS का समर्थन करता है, भले ही एनिमेटेडobjectAnimator हो)। जो, यदि आप उपयोग कर रहे हैं ViewPager, तो इसका मतलब है कि आपको v13 समर्थन लाइब्रेरी से एडेप्टर का उपयोग करना होगा, अन्यथा आपके पास व्यूपेंजर और फ़्लिपिंग एनीमेशन दोनों नहीं हो सकते।
GSerg

5
इसके अलावा सावधान रहें, अगस्त 2014 तक, v13 लाइब्रेरी नेस्टेड फ्रेगमेंट्स नहीं कर सकती है।
मार्टिन मार्कोसिनी

1
क्यों गूगल पर लोग iosched अनुप्रयोग के लिए v13 लाइब्रेरी का उपयोग कर के लिए चुना है github.com/google/iosched/blob/master/android/src/main/java/com/... , वे किसी कारण होना आवश्यक है
forcewill

40

SupportFragmentथोड़ी देर के लिए छड़ी करने का एक बड़ा कारण यह है कि आपके पास ChildFragmentManagerएपीआई 17 तक पहुंच नहीं है । समर्थन पुस्तकालय आपको बच्चे के टुकड़े प्रबंधक का समर्थन संस्करण देगा।

यह एक बड़ा सौदा बन जाता है अगर आपके पास ऐसे टुकड़े होते हैं जिनमें अन्य टुकड़े होते हैं। यह टैबलेट एप्लिकेशन में जटिलता का एक अच्छा सौदा है और / या आपकी समग्र वास्तुकला या तो एक टैब्लेट लेआउट पर आधारित है या नेविगेशनer का उपयोग करता है।


21

एंड्रॉइड 4.0+ को लक्षित करने के बावजूद, मैं समर्थन पुस्तकालयों को शामिल करने में निराश हो रहा था, लेकिन ऐसा लगता है कि यह आधिकारिक तौर पर अनुशंसित है:

एंड्रॉइड सपोर्ट लाइब्रेरी पैकेज में कई लाइब्रेरी शामिल हैं जिन्हें आपके एप्लिकेशन में शामिल किया जा सकता है। इन पुस्तकालयों में से प्रत्येक एंड्रॉइड प्लेटफ़ॉर्म संस्करणों की एक विशिष्ट श्रेणी और सुविधाओं के सेट का समर्थन करता है।

यह मार्गदर्शिका सहायता पुस्तकालयों द्वारा प्रदान की जाने वाली महत्वपूर्ण विशेषताओं और संस्करण का समर्थन करती है, ताकि आपको यह तय करने में मदद मिल सके कि आपको उनमें से किसको अपने आवेदन में शामिल करना चाहिए। सामान्य तौर पर, हम v4 समर्थन और v7 appcompat पुस्तकालयों को शामिल करने की सलाह देते हैं, क्योंकि वे एंड्रॉइड संस्करणों की एक विस्तृत श्रृंखला का समर्थन करते हैं और अनुशंसित उपयोगकर्ता इंटरफ़ेस पैटर्न के लिए एपीआई प्रदान करते हैं।

http://developer.android.com/tools/support-library/features.html


यह स्वीकार किए जाने वाला उत्तर होना चाहिए, इस तथ्य के बावजूद कि @brillenheini ने स्वयं / स्वयं एक उत्तर प्रदान किया। यह सर्वोत्तम सटीकता और संक्षिप्तता के साथ प्रश्न का उत्तर देता है।
अरविंद मणि

4

IMHO यदि आप केवल 4.0 के लिए विकसित करने की योजना बना रहे हैं, तो मैं यह सलाह दूंगा कि देशी पुस्तकालयों के साथ चलें क्योंकि निष्पादन योग्य छोटा हो जाएगा। यह सच है कि आप शुरुआती संस्करणों में बग की समस्याओं में भाग सकते हैं, लेकिन मुझे लगता है कि इनमें से अधिकांश को काम करने के लिए काफी तुच्छ होना चाहिए। यदि आप 4.0 और उच्चतर पर वैसे भी चल रहे हैं तो कम्पैटिबिलिटी लाइब्रेरी को देशी टुकड़ों में मैप करना चाहिए। तो आप अंत में इस तरह की समस्याओं से जूझ सकते हैं। समर्थन पुस्तकालयों के साथ समस्या यह है कि आपके पास बहुत सारी कक्षाएं 2x (एक बार समर्थन पैकेज संरचना में और एक बार "मूल" पैकेज संरचना में) दिखाई देती हैं जो विकास को थोड़ा अधिक बोझिल बना देती हैं।

हालाँकि, अगर आप अपने ऐप को 4.0 से पहले रिलीज़ करना चाहते हैं तो सपोर्ट लाइब्रेरी के आसपास कोई रास्ता नहीं है। साथ ही 2.3 पर सभी उपयोगकर्ताओं के लगभग 38% होने के कारण इस OS संस्करण को शामिल करने के लिए व्यावसायिक समझ हो सकती है। ऐसे मामले में आप जेक वार्टन्स एक्शनबेरलॉक के साथ संयोजन में समर्थन लाइब्रेरी का उपयोग कर सकते हैं (या एक बार रिलीज़ होने के बाद एक्शनबेर लाइब्रेरी का समर्थन करें)।


3
आपके उत्तर के लिए धन्यवाद। क्योंकि मुझे ViewPager की आवश्यकता है, मुझे वैसे भी समर्थन पुस्तकालय शामिल करना होगा। साथ ही, समर्थन टुकड़ा उपलब्ध होने पर मूल कार्यान्वयन पर स्विच करने का प्रयास नहीं करता है। डॉक्स का यही कहना है।
जेनी

हाँ, बात यह है (जैसा कि @brillenheini ने कहा) कि ViewPager के लिए आपको v4 की आवश्यकता है, इसलिए भले ही आप केवल v13 + उपकरणों को लक्षित कर रहे हों, फिर भी आप संभवतः वैसे भी v4 होने की संभावना पूरी कर लेंगे।
सोती

मुझे अभी पता चला है कि मेरे एपीआई 21 और ऐप पर भी (ViewPager को v4 की आवश्यकता है)। मेह: - /
मारक

2

ऐसा लगता है कि अब सपोर्ट लाइब्रेरी का उपयोग करना बेहतर है क्योंकि मैंने यहां स्टेटमेंट देखा https://developer.android.com/reference/android/app/Fragment.html

इस स्तर को एपीआई स्तर पी। में उपयोग किया गया था। सभी उपकरणों के संगत व्यवहार और लाइफसाइकल तक पहुंच के लिए सपोर्ट लाइब्रेरी फ्रैगमेंट का उपयोग करें।

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