गतिविधियों के बारे में जानकारी

Activity क्लास, Android का एक अहम कॉम्पोनेंट होता है ऐप्लिकेशन में गतिविधियों को लॉन्च करने और उन्हें एक साथ दिखाने के लिए, यह बुनियादी पर ऐप्लिकेशन मॉडल का हिस्सा बना सकते हैं. इनसे अलग कौनसे ऐप्लिकेशन main() तरीके से लॉन्च किए जाते हैं, Android सिस्टम, Activity इंस्टेंस में कोड को कॉलबैक के खास तरीकों को लागू करना, जो कन्वर्ज़न के खास स्टेज से जुड़े हों लाइफ़साइकल.

इस दस्तावेज़ में गतिविधियों के सिद्धांत के बारे में बताया गया है और इसके बाद, साथ ही, उनके साथ काम करने के बारे में आसान दिशा-निर्देश दें. अपने ऐप्लिकेशन को आर्किटेक्ट करने के सबसे सही तरीकों के बारे में ज़्यादा जानकारी पाने के लिए, देखें ऐप्लिकेशन आर्किटेक्चर की गाइड.

गतिविधियों का सिद्धांत

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

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

ऐक्टिविटी से उस विंडो का पता चलता है जिसमें ऐप्लिकेशन ड्रॉ करता है उसका यूज़र इंटरफ़ेस (यूआई) है. यह विंडो आम तौर पर पूरी स्क्रीन पर दिखती है, लेकिन हो सकता है कि यह विंडो और अन्य विंडो के ऊपर फ़्लोट करते हैं. आम तौर पर, एक गतिविधि किसी ऐप्लिकेशन में एक स्क्रीन लागू करता है. उदाहरण के लिए, किसी ऐप्लिकेशन की कोई गतिविधि प्राथमिकताएं स्क्रीन लागू करें. साथ ही, किसी दूसरी गतिविधि को लागू करें फ़ोटो चुनें स्क्रीन पर.

ज़्यादातर ऐप्लिकेशन में एक से ज़्यादा स्क्रीन होती हैं. इसका मतलब है कि उनमें कई स्क्रीन होती हैं गतिविधियां. आम तौर पर, ऐप्लिकेशन में एक गतिविधि को मुख्य गतिविधि के तौर पर तय किया जाता है गतिविधि होती है. यह उपयोगकर्ता के ऐप्लिकेशन लॉन्च करने पर दिखने वाली पहली स्क्रीन होती है. इसके बाद, हर गतिविधि दूसरी गतिविधि शुरू कर सकती है, ताकि अलग-अलग कार्रवाइयां करें. उदाहरण के लिए, किसी सामान्य ई-मेल में मुख्य गतिविधि ऐप्लिकेशन में, ई-मेल का इनबॉक्स दिखाने वाली स्क्रीन दिख सकती है. इसके बाद, मुख्य गतिविधि में ऐसी अन्य गतिविधियां भी शामिल हो सकती हैं जिनसे टास्क के लिए स्क्रीन की सुविधा मिलती हो ई-मेल लिखने और व्यक्तिगत ई-मेल खोलने में मदद करता है.

हालांकि, गतिविधियां एक साथ काम करती हैं, ताकि उपयोगकर्ताओं को एक जैसा अनुभव दिया जा सके ऐप्लिकेशन में, हर गतिविधि के लिए सिर्फ़ अन्य गतिविधियों की ज़रूरत होती है; ऐसे कई तरीके हैं आम तौर पर, ऐप्लिकेशन में की जाने वाली गतिविधियों पर कम से कम निर्भरियां निर्भर करती हैं. असल में, गतिविधियों में अक्सर अन्य ऐप्लिकेशन से जुड़ी गतिविधियां शामिल होती हैं. उदाहरण के लिए, कोई ब्राउज़र ऐप्लिकेशन, किसी सोशल मीडिया ऐप्लिकेशन की शेयर करने की गतिविधि लॉन्च कर सकता है.

अपने ऐप्लिकेशन में गतिविधियों का इस्तेमाल करने के लिए, आपको उनकी जानकारी इसमें रजिस्टर करनी होगी ऐप्लिकेशन के मेनिफ़ेस्ट के साथ-साथ, आपको गतिविधि की लाइफ़साइकल को सही तरीके से मैनेज करना होगा. इस दस्तावेज़ के बाकी हिस्से में ये विषय शामिल हैं.

मेनिफ़ेस्ट को कॉन्फ़िगर करना

आपका ऐप्लिकेशन गतिविधियों का इस्तेमाल कर पाए, इसके लिए आपको गतिविधियों के बारे में एलान करना होगा, और उनके कुछ एट्रिब्यूट को मेनिफ़ेस्ट में शामिल करें.

गतिविधियों के बारे में जानकारी दें

अपनी गतिविधि के बारे में एलान करने के लिए, मेनिफ़ेस्ट फ़ाइल खोलें और <गतिविधि> एलिमेंट, <ऐप्लिकेशन> एलिमेंट. उदाहरण के लिए:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

इस एलिमेंट के लिए सिर्फ़ यह ज़रूरी एट्रिब्यूट है android:name, जो गतिविधि के क्लास का नाम बताता है. एट्रिब्यूट भी जोड़े जा सकते हैं जो लेबल, आइकॉन या यूज़र इंटरफ़ेस (यूआई) थीम जैसी गतिविधि की विशेषताओं के बारे में बताती हैं. इन और दूसरे एट्रिब्यूट के बारे में ज़्यादा जानकारी के लिए, देखें <गतिविधि> तत्व संदर्भ दस्तावेज़.

ध्यान दें: अपना ऐप्लिकेशन पब्लिश करने के बाद, तुम्हें अपनी गतिविधि में बदलाव नहीं करना चाहिए नाम. ऐसा करने से, कुछ सुविधाएं काम करना बंद कर सकती हैं, जैसे कि ऐप्लिकेशन शॉर्टकट. पब्लिश करने के बाद, बदलावों से बचने के बारे में ज़्यादा जानने के लिए, यहां देखें चीज़ें जो नहीं बदल सकतीं.

इंटेंट फ़िल्टर का एलान करना

इंटेंट फ़िल्टर Android प्लैटफ़ॉर्म की एक बहुत अहम सुविधा है. वे आपको न सिर्फ़ अश्लील अनुरोध के साथ-साथ एक अस्पष्ट अनुरोध भी होना चाहिए. उदाहरण के लिए, किसी साफ़ तौर पर किए गए अनुरोध में सिस्टम को यह निर्देश दिया जा सकता है: “ईमेल भेजने की गतिविधि शुरू करें में दिखाई दे रहे हैं." इसके उलट, इंप्लिसिट अनुरोध सिस्टम की “किसी भी ईमेल स्थिति में ईमेल भेजें स्क्रीन को शुरू करें काम कर सकें." जब सिस्टम का यूज़र इंटरफ़ेस (यूआई) किसी उपयोगकर्ता से पूछता है कि उसे कौनसा ऐप्लिकेशन इस्तेमाल करना है एक काम करने में, वह काम पर एक इंटेंट फ़िल्टर होता है.

यह घोषणा करके आप इस सुविधा का फ़ायदा ले सकते हैं: <इंटेंट-फ़िल्टर> में विशेषता <activity> एलिमेंट देखें. इस एलिमेंट की परिभाषा में यह शामिल है: <action> एलिमेंट और, वैकल्पिक रूप से, <category> एलिमेंट और/या <data> एलिमेंट. ये एलिमेंट एक साथ जोड़ा जा सकता है. इससे यह पता चलता है कि आपकी गतिविधि से किस तरह का इंटेंट भेजा जा सकता है. इसके लिए उदाहरण के लिए, नीचे दिया गया कोड स्निपेट ऐसी गतिविधि को कॉन्फ़िगर करने का तरीका बताता है जो टेक्स्ट डेटा भेजता है और ऐसा करने के लिए दूसरी गतिविधियों से अनुरोध पाता है:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

इसमें उदाहरण के लिए, <action> एलिमेंट बताता है कि यह गतिविधि डेटा भेजती है. <category> का एलान करना DEFAULT के रूप में एलिमेंट, गतिविधि को सक्षम करता है लॉन्च करने के अनुरोध पाने के लिए. <data> एलिमेंट ऐसा डेटा बताता है जो इस गतिविधि से फ़ाइलें भेजी जा सकती हैं. नीचे दिया गया कोड स्निपेट ऊपर बताई गई गतिविधि:

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Java

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
अगर आपको अपने ऐप्लिकेशन में पूरी जानकारी शामिल करनी है और अन्य ऐप्लिकेशन को इसे चालू करने की अनुमति नहीं देनी है गतिविधि है, तो आप नहीं इंटेंट फ़िल्टर की ज़रूरत है. वे गतिविधियां, जो आप नहीं करना चाहते ऐप्लिकेशन के लिए उपलब्ध में कोई इंटेंट फ़िल्टर नहीं होना चाहिए, और आप एक्सप्लिसिट इंटेंट का इस्तेमाल करके, खुद ही उससे शुरुआत करें. ज़्यादा जानकारी पाने के लिए, आपकी गतिविधियां इंटेंट के हिसाब से जवाब दे सकती हैं, इंटेंट देखें इंटेंट फ़िल्टर में भी शामिल हो सकते हैं.

अनुमतियों का एलान करना

मेनिफ़ेस्ट फ़ाइल में दिए गए कंट्रोल करने के लिए <activity> टैग कौनसे ऐप्लिकेशन कोई खास गतिविधि शुरू कर सकते हैं. एक अभिभावकीय गतिविधि बच्चे की गतिविधि को तब तक मैनेज किया जा सकता है, जब तक दोनों गतिविधियों के लिए एक जैसी अनुमतियां न हों मेनिफ़ेस्ट. अगर आपको <uses-permission> एलिमेंट का इस्तेमाल किया जा सकता है, तो हर चाइल्ड ऐक्टिविटी से मेल खाना चाहिए <uses-permission> एलिमेंट.

उदाहरण के लिए, अगर आपका ऐप्लिकेशन, SocialApp नाम के किसी काल्पनिक ऐप्लिकेशन का इस्तेमाल करना चाहता है अगर सोशल मीडिया पर पोस्ट शेयर करनी है, तो SocialApp को इसकी अनुमति खुद तय करनी होगी जिस ऐप्लिकेशन को कॉल किया जा रहा है उसमें ये चीज़ें होनी चाहिए:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

इसके बाद, SocialApp को कॉल करने की अनुमति पाने के लिए, यह ज़रूरी है कि आपका ऐप्लिकेशन SocialApp का मेनिफ़ेस्ट:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

अनुमतियों और सुरक्षा के बारे में ज़्यादा जानकारी के लिए, यहां देखें सुरक्षा और अनुमतियां.

गतिविधि की लाइफ़साइकल मैनेज करना

अपने लाइफ़टाइम में कोई भी गतिविधि कई राज्यों से होकर गुज़रती है. अलग-अलग राज्यों के बीच ट्रांज़िशन मैनेज करने के लिए, कॉलबैक की सीरीज़ का इस्तेमाल किया जाता है. ये सेक्शन ये कॉलबैक लागू करते हैं.

onCreate()

आपको इस कॉलबैक को लागू करना होगा. यह तब ट्रिगर होता है, जब सिस्टम आपके गतिविधि. आपकी लागू की गई प्रोसेस में, इसके ज़रूरी कॉम्पोनेंट शुरू होने चाहिए आपकी गतिविधि: उदाहरण के लिए, आपके ऐप्लिकेशन को व्यू बनाने चाहिए और इन कामों के लिए डेटा को बाइंड करना चाहिए सूचियां यहां दी गई हैं. सबसे ज़रूरी बात, आपको इस ईमेल पते पर कॉल करना होगा setContentView() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है का इस्तेमाल करें.

onCreate() के खत्म होने के बाद, अगला कॉलबैक हमेशा onStart() होता है.

onStart()

onCreate() के बाहर निकलने पर, यह गतिविधि 'शुरू किया गया' स्टेटस डालता है और गतिविधि उपयोगकर्ता को दिखने लगती है. इस कॉलबैक में गतिविधि की फ़ाइनल तैयारी के लिए दी गई रकम शामिल होती है दुनिया भर के दर्शकों से जुड़ने और इंटरैक्टिव बनाने में मदद कर सकता है.

onResume()

गतिविधि के इंटरैक्शन शुरू होने से ठीक पहले सिस्टम इस कॉलबैक को शुरू करता है उपयोगकर्ता के साथ शेयर करते हैं. इस समय, गतिविधि सबसे ऊपर दिखती है स्टैक बनाता है और सभी उपयोगकर्ता इनपुट कैप्चर करता है. किसी ऐप्लिकेशन का ज़्यादातर मुख्य फ़ंक्शन, onResume() तरीके में लागू किया गया है.

onPause() कॉलबैक हमेशा onResume() का अनुसरण करता है.

onPause()

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

'रोकी गई' स्थिति में होने वाली कोई गतिविधि यूज़र इंटरफ़ेस (यूआई) को अपडेट करना जारी रख सकती है, अगर उपयोगकर्ता उम्मीद है कि यूज़र इंटरफ़ेस (यूआई) अपडेट हो जाएगा. इस तरह की गतिविधि के उदाहरणों में, नेविगेशन दिखाने वाला कोई विज्ञापन शामिल है मैप स्क्रीन या मीडिया प्लेयर पर चल रहा हो. ऐसी गतिविधियों से फ़ोकस खो जाने पर भी, उपयोगकर्ता उम्मीद है कि उनका यूज़र इंटरफ़ेस (यूआई) अपडेट होता रहेगा.

आपको इसका इस्तेमाल नहीं करना चाहिए ऐप्लिकेशन या उपयोगकर्ता खाते को सेव करने के लिए onPause() डेटा, नेटवर्क कॉल करने या डेटाबेस ट्रांज़ैक्शन करने के लिए इस्तेमाल किया जा सकता है. डेटा बचाने के बारे में जानकारी के लिए, देखें गतिविधि की स्थिति को सेव और वापस लाना.

onPause() के लागू होने के बाद, अगला कॉलबैक onStop() है या onResume(), यह इस पर निर्भर करता है कि गतिविधि के 'रोका गया' स्टेटस में जाने के बाद होता है.

onStop()

सिस्टम onStop() को तब कॉल करता है, जब यह गतिविधि अब उपयोगकर्ता को नहीं दिखेगी. ऐसा इसलिए हो सकता है क्योंकि गतिविधि को नष्ट किया जा रहा है, एक नई गतिविधि है शुरू कर रहे हैं या कोई मौजूदा गतिविधि शुरू हो रही है फिर से शुरू की गई स्थिति में है और बंद की गई गतिविधि को कवर कर रहा है. इन सभी मामलों में, रोकी गई गतिविधि अब नहीं है बिलकुल भी नहीं दिखते.

सिस्टम से कॉल किया जाने वाला अगला कॉलबैक या तो onRestart(), अगर उपयोगकर्ता से इंटरैक्ट करने के लिए गतिविधि का या onDestroy() अगर यह गतिविधि पूरी तरह से खत्म हो रही हो.

onRestart()

सिस्टम इस कॉलबैक को तब शुरू करता है, जब रोकी गई स्थिति में कोई गतिविधि होती है रीस्टार्ट होने वाला है. onRestart() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है गतिविधि की स्थिति को उसके रुकने के बाद से पहले जैसा करता है.

यह कॉलबैक हमेशा के बाद होता है onStart().

onDestroy()

किसी गतिविधि के खत्म होने से पहले, सिस्टम इस कॉलबैक को शुरू करता है.

गतिविधि को मिलने वाला आखिरी कॉलबैक, यह होता है. onDestroy() है आम तौर पर, यह पक्का करने के लिए लागू किया जाता है कि किसी गतिविधि के सभी संसाधन गतिविधि या उससे जुड़ी प्रोसेस के खत्म हो जाने पर, रिलीज़ किया जाता है.

इस सेक्शन में, इस विषय के बारे में सिर्फ़ जानकारी दी गई है. और ज़्यादा गतिविधि की लाइफ़साइकल और इसके कॉलबैक के बारे में ज़्यादा जानकारी, गतिविधियों को लाइफ़साइकल.