android - गतिविधि, AppCompatActivity, FragmentActivity, और ActionBarActivity: कब कौन सा उपयोग करें?




android-fragments android-activity (6)

मुझे लगा कि एक्टिविटी डिप्रेस्ड हो गई है

नहीं।

तो एपीआई स्तर 22 (एपीआई स्तर 15 या 16 के लिए न्यूनतम समर्थन के साथ) के लिए, मुझे घटकों को होस्ट करने के लिए और स्वयं घटकों के लिए वास्तव में क्या उपयोग करना चाहिए? क्या इन सभी के लिए उपयोग हैं, या मुझे एक या दो का उपयोग करना चाहिए लगभग विशेष रूप से?

Activity आधार रेखा है। प्रत्येक गतिविधि प्रत्यक्ष या अप्रत्यक्ष रूप से Activity से विरासत में मिलती है।

FragmentActivity support-v4 और support-v13 पुस्तकालयों में पाए गए टुकड़ों के बैकपोर्ट के साथ उपयोग के लिए है। टुकड़ों का मूल कार्यान्वयन एपीआई स्तर 11 में जोड़ा गया था, जो कि आपके प्रस्तावित minSdkVersion मूल्यों से कम है। केवल यही कारण है कि आपको विशेष रूप से FragmentActivity पर विचार करने की आवश्यकता होगी यदि आप नेस्टेड टुकड़ों (दूसरे टुकड़े को पकड़े हुए एक टुकड़ा) का उपयोग करना चाहते हैं, क्योंकि एपीआई स्तर 17 तक देशी टुकड़ों में समर्थित नहीं था।

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

ActionBarActivity appcompat-v7 से आधार गतिविधि का पुराना नाम है। विभिन्न कारणों से, वे नाम बदलना चाहते थे। जब तक आप किसी ActionBarActivity पर कुछ तृतीय-पक्ष लाइब्रेरी का उपयोग नहीं कर रहे हैं, तब तक आपको ActionBarActivity पर AppCompatActivity को प्राथमिकता देनी चाहिए।

तो, अपने minSdkVersion को 15-16 रेंज में दिया गया:

  • यदि आप बैकपोर्टेड मैटेरियल डिज़ाइन लुक चाहते हैं, AppCompatActivity उपयोग करें

  • यदि नहीं, लेकिन आप नेस्टेड टुकड़े चाहते हैं, तो FragmentActivity उपयोग करें

  • यदि नहीं, तो Activity उपयोग करें

केवल टिप्पणी के रूप में नोट से जोड़ना: AppCompatActivity FragmentActivity विस्तार करता है, इसलिए जिस किसी को भी FragmentActivity सुविधाओं का उपयोग करने की आवश्यकता है, वह AppCompatActivity उपयोग कर सकता है।

मैं iOS से आ रहा हूँ जहाँ यह आसान है और आप बस एक UIViewController का उपयोग करते हैं। हालाँकि, एंड्रॉइड चीजों में कुछ अधिक जटिल लगते हैं, विशिष्ट एपीआई स्तरों के लिए कुछ यूआईसीओम्पर्स के साथ। मैं Android के लिए BigNerdRanch पढ़ रहा हूं (पुस्तक लगभग 2 साल पुरानी है) और वे सुझाव देते हैं कि मैं अपनी FragmentActivities मेजबानी के लिए Activity का उपयोग करता हूं। हालाँकि, मुझे लगा कि Activity को हटा दिया गया है।

तो एपीआई स्तर 22 (एपीआई स्तर 15 या 16 के लिए न्यूनतम समर्थन के साथ) के लिए, मुझे घटकों को होस्ट करने के लिए और स्वयं घटकों के लिए वास्तव में क्या उपयोग करना चाहिए? क्या इन सभी के लिए उपयोग हैं, या मुझे एक या दो का उपयोग करना चाहिए लगभग विशेष रूप से?


2019: AppCompatActivity उपयोग करें

इस लेखन के समय (यदि यह अभी भी सत्य है, इसकी पुष्टि करने के लिए लिंक की जाँच करें), Android दस्तावेज़ीकरण AppCompatActivity का उपयोग करने की सलाह देता है यदि आप एक ऐप बार का उपयोग कर रहे हैं।

यह दिया गया तर्कसंगत है:

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

इस कारण से, आपको अपनी गतिविधियों के ऐप बार को कार्यान्वित करने के लिए समर्थन लाइब्रेरी के टूलबार वर्ग का उपयोग करना चाहिए। सपोर्ट लाइब्रेरी के टूलबार का उपयोग यह सुनिश्चित करने में मदद करता है कि आपके ऐप में उपकरणों की व्यापक रेंज में लगातार व्यवहार होगा। उदाहरण के लिए, टूलबार विजेट एंड्रॉइड 2.1 (एपीआई स्तर 7) या उसके बाद चलने वाले उपकरणों पर एक सामग्री डिजाइन अनुभव प्रदान करता है, लेकिन जब तक डिवाइस एंड्रॉइड 5.0 (एपीआई स्तर 21) या बाद में नहीं चल रहा है तब तक देशी एक्शन बार सामग्री डिजाइन का समर्थन नहीं करता है।

टूलबार जोड़ने की सामान्य दिशाएँ हैं

  1. V7 appcompat समर्थन पुस्तकालय जोड़ें
  2. अपनी सभी गतिविधियों का विस्तार करें AppCompatActivity
  3. घोषणापत्र में घोषणा करें कि आप NoActionBar चाहते NoActionBar
  4. प्रत्येक गतिविधि के xml लेआउट में ToolBar जोड़ें।
  5. प्रत्येक गतिविधि के onCreate में ToolBar प्राप्त करें।

अधिक विवरण के लिए दस्तावेज़ीकरण निर्देश देखें। वे काफी स्पष्ट और सहायक हैं।


चूंकि नाम Android के भविष्य के संस्करणों में बदलने की संभावना है (वर्तमान में नवीनतम AppCompatActivity लेकिन यह शायद कुछ बिंदु पर बदल जाएगा), मेरा मानना ​​है कि एक अच्छी बात यह है कि एक वर्ग Activity जो AppCompatActivity का विस्तार करती है और फिर सभी गतिविधियां उसी से आगे AppCompatActivity एक। यदि कल, वे उदाहरण के लिए AppCompatActivity2 लिए नाम बदलते हैं, AppCompatActivity2 आपको इसे केवल एक स्थान पर बदलना होगा।


न्यूनतम एपीआई स्तर 15 के लिए, आप AppCompatActivity का उपयोग करना चाहते हैं। उदाहरण के लिए, आपकी MainActivity इस तरह MainActivity :

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

AppCompatActivity उपयोग करने के लिए, सुनिश्चित करें कि आपके पास Google समर्थन लाइब्रेरी डाउनलोड है (आप इसे अपने टूल -> एंड्रॉइड -> एसडीके प्रबंधक में देख सकते हैं)। तो बस अपने अनुप्रयोग के gradle.build फ़ाइल में gradle निर्भरता शामिल करें:

compile 'com.android.support:appcompat-v7:22:2.0'

आप इस AppCompat को अपनी मुख्य Activity रूप में उपयोग कर सकते हैं, जिसका उपयोग तब Fragments या अन्य गतिविधियाँ शुरू करने के लिए किया जा सकता है (यह इस बात पर निर्भर करता है कि आप किस प्रकार का ऐप बना रहे हैं)।

BigNerdRanch पुस्तक एक अच्छा संसाधन है, लेकिन हाँ, यह पुराना है। एंड्रॉइड कैसे काम करता है, इसके बारे में सामान्य जानकारी के लिए इसे पढ़ें, लेकिन उन विशिष्ट वर्गों की अपेक्षा न करें, जिनका वे उपयोग करते हैं।


Activity अन्य सभी गतिविधियों का आधार वर्ग है, मुझे नहीं लगता कि इसे पदावनत किया जाएगा। उनके बीच संबंध है:

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

'<-' का अर्थ यहाँ विरासत है। reference ने कहा कि ActionBarActivity को हटा दिया गया है, इसके बजाय AppCompatActivity उपयोग करें।

इसलिए मूल रूप से, AppCompatActivity का उपयोग करना हमेशा सही विकल्प होता है। उनके बीच अंतर हैं:

  • Activity बुनियादी है।
  • Activity आधार पर, FragmentActivity का उपयोग करने की क्षमता प्रदान करता है।
  • FragmentActivity आधार पर, AppCompatActivity ActionBar को सुविधाएँ प्रदान करता है।

Activity क्लास बेसिक क्लास है। (मूल) यह फ्रेगमेंट प्रबंधन (एपीआई 11 के बाद से) का समर्थन करता है। अब इसके शुद्ध उपयोग की अनुशंसा नहीं की जाती है क्योंकि इसके विशेषज्ञ कहीं बेहतर हैं।

ActionBarActivity एक पल में एक्टिविटी क्लास में बदल गई क्योंकि एक्शनबेर को ऐप में संभालना आसान हो गया।

AppCompatActivity जाने का नया तरीका है क्योंकि ActionBar को अब प्रोत्साहित नहीं किया गया है और आपको इसके बजाय टूलबार का उपयोग करना चाहिए (यह वर्तमान में ActionBar प्रतिस्थापन है)। AppCompatActivity FragmentActivity से विरासत में मिली है, इसलिए अगर आपको अपनी (Fragment Manager के माध्यम से) Fragments को संभालने की जरूरत है। AppCompatActivity किसी भी एपीआई के लिए है, न केवल 16+ (जिसने कहा?)। आप अपनी ग्रेड फ़ाइल में compile 'com.android.support:appcompat-v7:24:2.0' जोड़कर इसका उपयोग कर सकते हैं। मैं इसे एपीआई 10 में उपयोग करता हूं और यह सही काम करता है।






appcompatactivity