- सिंटैक्स:
<activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:autoRemoveFromRecents=["true" | "false"] android:banner="drawable resource" android:canDisplayOnRemoteDevices=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:colorMode=[ "hdr" | "wideColorGamut"] android:configChanges=["colorMode", "density", "fontScale", "fontWeightAdjustment", "grammaticalGender", "keyboard", "keyboardHidden", "layoutDirection", "locale", "mcc", "mnc", "navigation", "orientation", "screenLayout", "screenSize", "smallestScreenSize", "touchscreen", "uiMode"] android:directBootAware=["true" | "false"] android:documentLaunchMode=["intoExisting" | "always" | "none" | "never"] android:enabled=["true" | "false"] android:enableOnBackInvokedCallback=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:immersive=["true" | "false"] android:label="string resource" android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance" | "singleInstancePerTask"] android:lockTaskMode=["normal" | "never" | "if_whitelisted" | "always"] android:maxRecents="integer" android:maxAspectRatio="float" android:minAspectRatio="float" android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:parentActivityName="string" android:persistableMode=["persistRootOnly" | "persistAcrossReboots" | "persistNever"] android:permission="string" android:process="string" android:relinquishTaskIdentity=["true" | "false"] android:requireContentUriPermissionFromCaller=["none" | "read" | "readAndWrite" | "readOrWrite" | "write"] android:resizeableActivity=["true" | "false"] android:screenOrientation=["unspecified" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "userLandscape" | "userPortrait" | "sensor" | "fullSensor" | "nosensor" | "user" | "fullUser" | "locked"] android:showForAllUsers=["true" | "false"] android:stateNotNeeded=["true" | "false"] android:supportsPictureInPicture=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > ... </activity>
- इसमें शामिल है:
<application>- इसमें ये शामिल हो सकते हैं:
<intent-filter><meta-data><layout><property>- विवरण:
- यह एक ऐक्टिविटी (
Activityसबक्लास) का एलान करता है. यह ऐक्टिविटी, ऐप्लिकेशन के विज़ुअल यूज़र इंटरफ़ेस के कुछ हिस्से को लागू करती है. सभी गतिविधियों को मेनिफ़ेस्ट फ़ाइल में<activity>एलिमेंट के तौर पर दिखाया जाना चाहिए. जिन कुकी के बारे में नहीं बताया जाता उन्हें सिस्टम नहीं पहचानता और वे कभी नहीं चलतीं. - एट्रिब्यूट:
android:allowEmbedded-
इससे पता चलता है कि गतिविधि को किसी दूसरी गतिविधि के एम्बेड किए गए चाइल्ड के तौर पर लॉन्च किया जा सकता है. खास तौर पर, ऐसे मामले में जहां चाइल्ड किसी कंटेनर में रहता है. जैसे, किसी दूसरी गतिविधि के मालिकाना हक वाला
Display. उदाहरण के लिए, Wear पर कस्टम सूचनाओं के लिए इस्तेमाल की जाने वाली गतिविधियां, इस बारे में जानकारी देती हैं. इससे Wear, गतिविधि को अपनी कॉन्टेक्स्ट स्ट्रीम में दिखा सकता है. यह कॉन्टेक्स्ट स्ट्रीम, किसी अन्य प्रोसेस में मौजूद होती है.इस एट्रिब्यूट की डिफ़ॉल्ट वैल्यू
falseहै. android:allowTaskReparenting- क्या गतिविधि को उस टास्क से दूसरे टास्क पर ले जाया जा सकता है जिसने इसे शुरू किया था. ऐसा तब किया जा सकता है, जब उस टास्क को अगली बार सबसे ऊपर लाया जाए. अगर यह टास्क के साथ मूव कर सकता है, तो यह
"true"है. अगर यह टास्क के साथ मूव नहीं कर सकता, तो यह"false"है.अगर इस एट्रिब्यूट को सेट नहीं किया जाता है, तो
<application>एलिमेंट केallowTaskReparentingएट्रिब्यूट की सेट की गई वैल्यू, गतिविधि पर लागू होती है. डिफ़ॉल्ट वैल्यू"false"है.आम तौर पर, जब कोई गतिविधि शुरू की जाती है, तो उसे शुरू करने वाले टास्क से जोड़ दिया जाता है. यह गतिविधि, टास्क से तब तक जुड़ी रहती है, जब तक वह खत्म नहीं हो जाती. इस एट्रिब्यूट का इस्तेमाल करके, इसे उस टास्क से फिर से जोड़ा जा सकता है जिससे यह जुड़ा हुआ था. ऐसा तब किया जाता है, जब इसका मौजूदा टास्क अब नहीं दिखता. आम तौर पर, इसका इस्तेमाल किसी ऐप्लिकेशन की गतिविधियों को उस ऐप्लिकेशन से जुड़े मुख्य टास्क पर ले जाने के लिए किया जाता है.
उदाहरण के लिए, अगर किसी ईमेल मैसेज में वेब पेज का लिंक है, तो लिंक पर क्लिक करने से एक ऐसी गतिविधि शुरू हो जाती है जो पेज को दिखा सकती है. इस गतिविधि को ब्राउज़र ऐप्लिकेशन तय करता है, लेकिन इसे ईमेल टास्क के हिस्से के तौर पर लॉन्च किया जाता है. अगर इसे ब्राउज़र टास्क से फिर से जोड़ा जाता है, तो यह तब दिखता है, जब ब्राउज़र अगली बार फ़्रंट पर आता है. साथ ही, जब ईमेल टास्क फिर से फ़्रंट पर आता है, तब यह नहीं दिखता.
किसी गतिविधि की अफ़िनिटी,
taskAffinityएट्रिब्यूट से तय होती है. किसी टास्क की अफ़िनिटी, उसकी रूट ऐक्टिविटी की अफ़िनिटी पढ़कर तय की जाती है. इसलिए, परिभाषा के हिसाब से, रूट ऐक्टिविटी हमेशा एक ही अफ़िनिटी वाले टास्क में होती है."singleTask"या"singleInstance"लॉन्च मोड वाली गतिविधियां, सिर्फ़ टास्क के रूट में हो सकती हैं. इसलिए, टास्क को फिर से पैरंट बनाने की सुविधा सिर्फ़"standard"और"singleTop"मोड के लिए उपलब्ध है. (launchModeएट्रिब्यूट भी देखें.) android:alwaysRetainTaskState- क्या गतिविधि से जुड़े टास्क की स्थिति को सिस्टम हमेशा बनाए रखता है.
"true"अगर ऐसा है, तो और"false"अगर सिस्टम कुछ स्थितियों में टास्क को उसकी शुरुआती स्थिति पर रीसेट कर सकता है, तो. डिफ़ॉल्ट वैल्यू"false"है. यह एट्रिब्यूट, किसी टास्क की मुख्य गतिविधि के लिए ही काम का होता है. अन्य सभी गतिविधियों के लिए, इसे अनदेखा कर दिया जाता है.आम तौर पर, जब उपयोगकर्ता होम स्क्रीन से किसी टास्क को फिर से चुनता है, तो सिस्टम उस टास्क को क्लियर कर देता है. इससे रूट ऐक्टिविटी के ऊपर मौजूद स्टैक से सभी गतिविधियां हट जाती हैं. आम तौर पर, ऐसा तब किया जाता है, जब उपयोगकर्ता ने किसी टास्क को एक तय समयसीमा तक विज़िट न किया हो. जैसे, 30 मिनट तक.
हालांकि, इस एट्रिब्यूट के
"true"होने पर, उपयोगकर्ता हमेशा टास्क की पिछली स्थिति पर वापस आ जाते हैं. इससे कोई फ़र्क़ नहीं पड़ता कि वे वहां कैसे पहुंचते हैं. यह वेब ब्राउज़र जैसे ऐप्लिकेशन में काम आता है. इसमें कई तरह की स्थितियां होती हैं, जैसे कि कई टैब खुले होते हैं. उपयोगकर्ता इन टैब को बंद नहीं करना चाहते. android:autoRemoveFromRecents- इस एट्रिब्यूट के साथ लॉन्च किए गए टास्क, हाल ही के ऐप्लिकेशन वाली स्क्रीन में तब तक दिखते हैं, जब तक टास्क में आखिरी गतिविधि पूरी नहीं हो जाती. अगर
trueहै, तो टास्क को हाल ही के टास्क वाली स्क्रीन से अपने-आप हटा दिया जाता है. इससे, कॉल करने वाले व्यक्ति केFLAG_ACTIVITY_RETAIN_IN_RECENTSके इस्तेमाल पर रोक लग जाती है. यह बूलियन वैल्यू होनी चाहिए. जैसे,"true"या"false". android:banner- ड्रॉ करने लायक संसाधन
जो इससे जुड़े आइटम के लिए, बड़ा ग्राफ़िकल बैनर उपलब्ध कराता है. इसका इस्तेमाल
<activity>टैग के साथ करके, किसी गतिविधि के लिए डिफ़ॉल्ट बैनर उपलब्ध कराएं. इसके अलावा, इसका इस्तेमाल<application>टैग के साथ करके, ऐप्लिकेशन की सभी गतिविधियों के लिए बैनर उपलब्ध कराएं.सिस्टम, Android TV की होम स्क्रीन पर किसी ऐप्लिकेशन को दिखाने के लिए इस बैनर का इस्तेमाल करता है. यह बैनर सिर्फ़ होम स्क्रीन पर दिखता है. इसलिए, इसे सिर्फ़ उन ऐप्लिकेशन के लिए तय किया जाता है जिनमें
CATEGORY_LEANBACK_LAUNCHERइंटेंट को हैंडल करने वाली कोई गतिविधि होती है.इस एट्रिब्यूट को, इमेज वाले ड्रॉएबल रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है. जैसे,
"@drawable/banner". कोई डिफ़ॉल्ट बैनर नहीं है.ज़्यादा जानकारी के लिए, टीवी ऐप्लिकेशन का इस्तेमाल शुरू करना लेख में होम स्क्रीन बैनर उपलब्ध कराना देखें.
android:canDisplayOnRemoteDevices-
इससे पता चलता है कि गतिविधि को किसी ऐसे रिमोट डिवाइस पर दिखाया जा सकता है या नहीं जिस पर Android चल रहा हो या न चल रहा हो. यह बूलियन वैल्यू होनी चाहिए. जैसे,
"true"या"false".इस एट्रिब्यूट की डिफ़ॉल्ट वैल्यू
"true"है. android:clearTaskOnLaunch- होम स्क्रीन से फिर से लॉन्च करने पर, क्या टास्क से सभी गतिविधियां हटा दी जाती हैं. हालांकि, रूट गतिविधि को नहीं हटाया जाता.
"true"अगर टास्क को हमेशा उसकी मुख्य गतिविधि से अलग कर दिया जाता है और"false"अगर ऐसा नहीं होता है. डिफ़ॉल्ट वैल्यू"false"है. यह एट्रिब्यूट, सिर्फ़ उन गतिविधियों के लिए काम का है जो कोई नया टास्क शुरू करती हैं. इन्हें रूट गतिविधि कहा जाता है. टास्क में मौजूद अन्य सभी गतिविधियों के लिए, इसे अनदेखा कर दिया जाता है.जब वैल्यू
"true"होती है, तो हर बार टास्क शुरू करने पर उपयोगकर्ताओं को इसकी रूट ऐक्टिविटी पर ले जाया जाता है. इससे कोई फ़र्क़ नहीं पड़ता कि उन्होंने टास्क में आखिरी बार क्या किया था और उन्होंने इसे छोड़ने के लिए, 'वापस जाएं' या 'होम' बटन का इस्तेमाल किया था या नहीं. वैल्यू"false"होने पर, कुछ मामलों में टास्क से गतिविधियां हटाई जा सकती हैं. हालांकि, ऐसा हमेशा नहीं होता. ज़्यादा जानकारी के लिए,alwaysRetainTaskStateएट्रिब्यूट देखें.मान लें कि उपयोगकर्ता होम स्क्रीन से गतिविधि P लॉन्च करता है और वहां से गतिविधि Q पर जाता है. इसके बाद, उपयोगकर्ता होम पर टैप करता है और फिर गतिविधि P पर वापस जाता है. आम तौर पर, उपयोगकर्ता को गतिविधि Q दिखती है, क्योंकि P के टास्क में वह आखिरी बार यही गतिविधि कर रहा था. हालांकि, अगर P इस फ़्लैग को
"true"पर सेट करता है, तो इसके ऊपर की सभी गतिविधियां हटा दी जाती हैं. इस मामले में, जब उपयोगकर्ता होम स्क्रीन से गतिविधि P लॉन्च करता है, तो Q को हटा दिया जाता है. इसलिए, टास्क पर वापस आने पर उपयोगकर्ता को सिर्फ़ P दिखता है.अगर यह एट्रिब्यूट और
allowTaskReparentingदोनों"true"हैं, तो फिर से पैरंट बनाए जा सकने वाली सभी गतिविधियों को उस टास्क में ले जाया जाता है जिसके साथ वे अफ़िनिटी शेयर करती हैं. इसके बाद, बाकी गतिविधियों को हटा दिया जाता है.अगर
FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDसेट नहीं है, तो इस एट्रिब्यूट को अनदेखा कर दिया जाता है. android:colorModeइससे गतिविधि के कलर मोड के बारे में पता चलता है. अगर यह एट्रिब्यूट दिया गया है, तो इसकी वैल्यू
hdrयाwideColorGamutहो सकती है.अगर
hdr, तो अनुरोध करता है कि गतिविधि को हाई डाइनैमिक रेंज में दिखाया जाए. हालांकि, ऐसा तब ही किया जाएगा, जब डिवाइस पर यह सुविधा काम करती हो.अगर
wideColorGamut, तो यह अनुरोध करता है कि गतिविधि को वाइड कलर गैमट मोड में दिखाया जाए उन डिवाइसों पर जो इस मोड के साथ काम करते हैं. वाइड कलर गैमट मोड में, कोई विंडो ज़्यादा चटकीले रंग दिखाने के लिए,SRGBगैमट से बाहर रेंडर कर सकती है. अगर डिवाइस पर वाइड कलर गैमट रेंडरिंग की सुविधा काम नहीं करती है, तो इस एट्रिब्यूट का कोई असर नहीं होगा. वाइड कलर मोड में रेंडर करने के बारे में ज़्यादा जानने के लिए, वाइड कलर कॉन्टेंट की मदद से ग्राफ़िक बेहतर बनाना लेख पढ़ें.android:configChanges- इस सूची में कॉन्फ़िगरेशन में हुए ऐसे बदलाव शामिल होते हैं जिन्हें गतिविधि खुद मैनेज करती है. रनटाइम के दौरान कॉन्फ़िगरेशन में बदलाव होने पर, गतिविधि डिफ़ॉल्ट रूप से बंद हो जाती है और फिर से शुरू हो जाती है. हालांकि, इस एट्रिब्यूट के साथ कॉन्फ़िगरेशन का एलान करने से, गतिविधि को फिर से शुरू होने से रोका जा सकता है. इसके बजाय, गतिविधि चालू रहती है और इसके
onConfigurationChanged()तरीके को कॉल किया जाता है.ध्यान दें: इस एट्रिब्यूट का इस्तेमाल सिर्फ़ खास मामलों में करें, ताकि ऐप्लिकेशन की परफ़ॉर्मेंस और रिस्पॉन्स देने की क्षमता को बेहतर बनाया जा सके. ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन में किए गए बदलावों को मैनेज करना लेख पढ़ें.
इस एट्रिब्यूट के लिए, यहां दी गई स्ट्रिंग मान्य वैल्यू हैं. एक से ज़्यादा वैल्यू को
|से अलग किया जाता है. जैसे,"locale|navigation|orientation".मान ब्यौरा "colorMode"स्क्रीन के कलर मोड की सुविधाएं (कलर गैमट या डाइनैमिक रेंज) बदल गई हैं.
ध्यान दें: गतिविधि के लिए,
colorModeएट्रिब्यूट के साथ या रनटाइम में अनुरोध किया गया कलर मोड, अलग-अलग कलर मोड की सुविधा से अलग होता है. कलर मोड बदलने वाली गतिविधि से कॉन्फ़िगरेशन में कोई बदलाव नहीं होता, क्योंकि डिसप्ले के रंग की क्षमताओं में कोई बदलाव नहीं हुआ है."density"डिसप्ले डेंसिटी में बदलाव होने पर. जैसे, जब उपयोगकर्ता डिसप्ले के लिए कोई अलग स्केल तय करता है या अब कोई दूसरा डिसप्ले चालू है.
इसे एपीआई लेवल 24 में जोड़ा गया है.
"fontScale"फ़ॉन्ट के स्केलिंग फ़ैक्टर में बदलाव, जैसे कि जब उपयोगकर्ता फ़ॉन्ट का नया ग्लोबल साइज़ चुनता है. "fontWeightAdjustment"फ़ॉन्ट के वेट को बढ़ाने की वैल्यू बदल गई है. "grammaticalGender"भाषा के व्याकरणिक लिंग में बदलाव हुआ है. GrammaticalInflectionManagerदेखें.एपीआई लेवल 34 में जोड़ा गया.
"keyboard"कीबोर्ड के टाइप में बदलाव, जैसे कि जब उपयोगकर्ता किसी बाहरी कीबोर्ड को प्लग इन करता है. "keyboardHidden"कीबोर्ड ऐक्सेस करने की सुविधा में बदलाव, जैसे कि जब उपयोगकर्ता हार्डवेयर कीबोर्ड दिखाता है. "layoutDirection"लेआउट की दिशा में बदलाव, जैसे कि बाएं से दाएं (एलटीआर) से दाएं से बाएं (आरटीएल) में बदलाव.
इसे एपीआई लेवल 17 में जोड़ा गया है.
"locale"लोकल में बदलाव होने पर. जैसे, जब उपयोगकर्ता कोई नई भाषा चुनता है, जिसमें टेक्स्ट दिखता है. "mcc"जब सिम कार्ड का पता चलता है, तब IMSI मोबाइल कंट्री कोड (एमसीसी) में बदलाव होता है. "mnc"जब कोई ऐसा सिम कार्ड डाला जाता है जो एमएनसी को अपडेट करता है, तब आईएमएसआई मोबाइल नेटवर्क कोड (एमएनसी) में बदलाव होता है. "navigation"नेविगेशन टाइप (ट्रैकबॉल या डी-पैड) में बदलाव. आम तौर पर, ऐसा नहीं होता. "orientation"स्क्रीन की दिशा में बदलाव. जैसे, जब उपयोगकर्ता डिवाइस को घुमाता है.
ध्यान दें: अगर आपका ऐप्लिकेशन, Android 3.2 (एपीआई लेवल 13) या इसके बाद के वर्शन को टारगेट करता है, तो
"screenLayout"और"screenSize"कॉन्फ़िगरेशन के बारे में भी बताएं. ऐसा इसलिए, क्योंकि डिवाइस के पोर्ट्रेट और लैंडस्केप मोड के बीच स्विच करने पर, स्क्रीन लेआउट और स्क्रीन साइज़ बदल सकता है."screenLayout"स्क्रीन लेआउट में बदलाव, जैसे कि जब कोई दूसरा डिसप्ले चालू हो जाता है. "screenSize"मौजूदा स्क्रीन साइज़ में बदलाव.
इससे मौजूदा पहलू अनुपात के हिसाब से, फ़िलहाल उपलब्ध साइज़ में हुए बदलाव का पता चलता है. इसलिए, जब उपयोगकर्ता लैंडस्केप और पोर्ट्रेट मोड के बीच स्विच करता है, तो यह बदल जाता है.
एपीआई लेवल 13 में जोड़ा गया.
"smallestScreenSize"फ़िज़िकल स्क्रीन के साइज़ में बदलाव.
इससे ओरिएंटेशन के बावजूद साइज़ में बदलाव होता है. इसलिए, यह सिर्फ़ तब बदलता है, जब स्क्रीन का असल साइज़ बदलता है. जैसे, किसी बाहरी डिसप्ले पर स्विच करना. इस कॉन्फ़िगरेशन में बदलाव करने का मतलब है कि
smallestWidthकॉन्फ़िगरेशन में बदलाव किया गया है.एपीआई लेवल 13 में जोड़ा गया.
"touchscreen"टचस्क्रीन मोड में बदलाव, जैसे कि जब उपयोगकर्ता किसी इनपुट डिवाइस को कनेक्ट या डिसकनेक्ट करता है या ऐप्लिकेशन को अलग-अलग डिसप्ले के बीच ले जाता है. "uiMode"यूज़र इंटरफ़ेस मोड में बदलाव होने पर. जैसे, जब उपयोगकर्ता डिवाइस को डेस्क या कार डॉक में रखता है या नाइट मोड बदलता है. अलग-अलग यूज़र इंटरफ़ेस (यूआई) मोड के बारे में ज़्यादा जानने के लिए, UiModeManagerदेखें.एपीआई लेवल 8 में जोड़ा गया.
कॉन्फ़िगरेशन में किए गए इन सभी बदलावों से, ऐप्लिकेशन को दिखने वाली संसाधन वैल्यू पर असर पड़ सकता है. इसलिए, जब
onConfigurationChanged()को कॉल किया जाता है, तो बदलाव को सही तरीके से हैंडल करने के लिए, आम तौर पर सभी संसाधनों को फिर से पाना ज़रूरी होता है. इनमें व्यू लेआउट और ड्रॉएबल शामिल हैं.ध्यान दें: मल्टी-विंडो से जुड़े कॉन्फ़िगरेशन में बदलाव करने के लिए,
"screenLayout"और"smallestScreenSize", दोनों का इस्तेमाल करें. मल्टी-विंडो की सुविधा, Android 7.0 (एपीआई लेवल 24) या इसके बाद के वर्शन पर काम करती है. android:directBootAwareक्या ऐक्टिविटी डायरेक्ट-बूट के बारे में जानती है—यानी, क्या यह उपयोगकर्ता के डिवाइस अनलॉक करने से पहले चल सकती है.
ध्यान दें: डायरेक्ट बूट के दौरान, आपके ऐप्लिकेशन में मौजूद कोई गतिविधि सिर्फ़ उस डेटा को ऐक्सेस कर सकती है जो डिवाइस प्रोटेक्टेड स्टोरेज में सेव है.
डिफ़ॉल्ट वैल्यू
"false"है.android:documentLaunchMode- इससे पता चलता है कि जब भी कोई ऐक्टिविटी लॉन्च की जाती है, तो उसे टास्क में कैसे जोड़ा जाता है.
इस एट्रिब्यूट की मदद से, उपयोगकर्ता को एक ही ऐप्लिकेशन के कई दस्तावेज़, हाल ही के दस्तावेज़ वाली स्क्रीन पर दिखते हैं.
इस एट्रिब्यूट की चार वैल्यू होती हैं. जब उपयोगकर्ता ऐप्लिकेशन की मदद से कोई दस्तावेज़ खोलता है, तब इन वैल्यू से ये असर पड़ते हैं:
मान ब्यौरा "intoExisting"सिस्टम ऐसे टास्क को खोजता है जिसके बेस इंटेंट का ComponentNameऔर डेटा यूआरआई, लॉन्चिंग इंटेंट से मेल खाता हो. अगर सिस्टम को ऐसा कोई टास्क मिलता है, तो सिस्टम उस टास्क को मिटा देता है और उसे फिर से शुरू करता है. साथ ही, रूट ऐक्टिविटी कोonNewIntent(android.content.Intent)कॉल मिलता है. अगर सिस्टम को ऐसा कोई टास्क नहीं मिलता है, तो सिस्टम एक नया टास्क बनाता है."always"इस गतिविधि से दस्तावेज़ के लिए एक नया टास्क बनता है. भले ही, दस्तावेज़ पहले से खुला हो. यह FLAG_ACTIVITY_NEW_DOCUMENTऔरFLAG_ACTIVITY_MULTIPLE_TASK, दोनों फ़्लैग सेट करने जैसा ही है."none"इस गतिविधि से, गतिविधि के लिए कोई नया टास्क नहीं बनता. यह डिफ़ॉल्ट वैल्यू है. इससे नया टास्क सिर्फ़ तब बनता है, जब FLAG_ACTIVITY_NEW_TASKसेट हो. 'हाल ही के ऐप्लिकेशन' स्क्रीन, ऐक्टिविटी को डिफ़ॉल्ट रूप से इस तरह से दिखाती है: यह ऐप्लिकेशन के लिए एक टास्क दिखाती है. यह उस ऐक्टिविटी से फिर से शुरू होता है जिसे उपयोगकर्ता ने आखिरी बार शुरू किया था."never"अगर इंटेंट में FLAG_ACTIVITY_NEW_DOCUMENTशामिल है, तब भी गतिविधि को नए दस्तावेज़ में लॉन्च नहीं किया जाता. इस सेटिंग को सेट करने पर,FLAG_ACTIVITY_NEW_DOCUMENTऔरFLAG_ACTIVITY_MULTIPLE_TASKफ़्लैग का व्यवहार बदल जाता है. ऐसा तब होता है, जब गतिविधि में इनमें से कोई एक फ़्लैग सेट किया गया हो. साथ ही, 'हाल ही के ऐप्लिकेशन' स्क्रीन पर ऐप्लिकेशन के लिए एक ही टास्क दिखता है. यह टास्क, उपयोगकर्ता की पिछली गतिविधि से फिर से शुरू होता है.ध्यान दें:
"none"और"never"के अलावा अन्य वैल्यू के लिए, गतिविधि कोlaunchMode="standard"के साथ तय किया जाता है. इस एट्रिब्यूट की वैल्यू न देने पर,documentLaunchMode="none"का इस्तेमाल किया जाता है. android:enabled- क्या सिस्टम, गतिविधि को इंस्टैंशिएट कर सकता है. अगर ऐसा किया जा सकता है, तो
"true"और अगर ऐसा नहीं किया जा सकता, तो"false". डिफ़ॉल्ट वैल्यू"true"है.<application>एलिमेंट का अपनाenabledएट्रिब्यूट होता है. यह ऐप्लिकेशन के सभी कॉम्पोनेंट पर लागू होता है. इसमें गतिविधियां भी शामिल हैं. सिस्टम को गतिविधि शुरू करने के लिए,<application>और<activity>, दोनों एट्रिब्यूट की वैल्यू"true"होनी चाहिए. ऐसा इसलिए, क्योंकि ये दोनों एट्रिब्यूट डिफ़ॉल्ट रूप से"true"होते हैं. अगर इनमें से कोई भी"false"है, तो इसे इंस्टैंशिएट नहीं किया जा सकता. android:enableOnBackInvokedCallbackइस फ़्लैग की मदद से, गतिविधि के लेवल पर प्रेडिक्टिव सिस्टम ऐनिमेशन से ऑप्ट आउट किया जा सकता है.
गतिविधि के लेवल पर पीछे जाने पर झलक दिखाने वाला हाथ का जेस्चर ऐनिमेशन बंद करने के लिए,
android:enableOnBackInvokedCallback=falseको सेट करें. साथ ही, सिस्टम कोOnBackInvokedCallbackप्लैटफ़ॉर्म एपीआई के कॉल को अनदेखा करने का निर्देश दें.android:excludeFromRecentsइस गतिविधि से शुरू किए गए टास्क को हाल ही के ऐप्लिकेशन स्क्रीन से बाहर रखा गया है या नहीं. इसका मतलब है कि जब यह गतिविधि किसी नए टास्क की रूट गतिविधि होती है, तो यह एट्रिब्यूट तय करता है कि टास्क, हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की सूची में दिखेगा या नहीं. अगर टास्क को सूची से हटाया गया है, तो
"true"; अगर टास्क को शामिल किया गया है, तो"false". डिफ़ॉल्ट वैल्यू"false"है.android:exportedक्या गतिविधि को अन्य ऐप्लिकेशन के कॉम्पोनेंट लॉन्च कर सकते हैं:
- अगर वैल्यू
"true"है, तो गतिविधि को कोई भी ऐप्लिकेशन ऐक्सेस कर सकता है. साथ ही, इसे क्लास के सही नाम से लॉन्च किया जा सकता है. - अगर
"false"है, तो गतिविधि को सिर्फ़ एक ही ऐप्लिकेशन के कॉम्पोनेंट, एक ही उपयोगकर्ता आईडी वाले ऐप्लिकेशन या सिस्टम के खास कॉम्पोनेंट लॉन्च कर सकते हैं. अगर कोई इंटेंट फ़िल्टर नहीं है, तो यह डिफ़ॉल्ट वैल्यू होती है.
अगर आपके ऐप्लिकेशन में मौजूद किसी गतिविधि में इंटेंट फ़िल्टर शामिल हैं, तो इस एलिमेंट को
"true"पर सेट करें, ताकि अन्य ऐप्लिकेशन इसे शुरू कर सकें. उदाहरण के लिए, अगर गतिविधि, ऐप्लिकेशन की मुख्य गतिविधि है और इसमेंcategoryandroid.intent.category.LAUNCHERशामिल है.अगर इस एलिमेंट को
"false"पर सेट किया जाता है और कोई ऐप्लिकेशन गतिविधि शुरू करने की कोशिश करता है, तो सिस्टमActivityNotFoundExceptionदिखाता है.इस एट्रिब्यूट के अलावा, किसी गतिविधि को अन्य ऐप्लिकेशन पर दिखने से रोकने के लिए और भी तरीके हैं. अनुमतियों का इस्तेमाल, उन बाहरी इकाइयों को सीमित करने के लिए भी किया जाता है जो गतिविधि को शुरू कर सकती हैं.
permissionएट्रिब्यूट देखें.- अगर वैल्यू
android:finishOnTaskLaunch- जब उपयोगकर्ता होम स्क्रीन पर मौजूद टास्क को चुनकर, उसे फिर से लॉन्च करता है, तब रूट ऐक्टिविटी को छोड़कर, क्या ऐक्टिविटी का मौजूदा इंस्टेंस बंद हो जाता है. अगर यह बंद है, तो
"true"और अगर नहीं है, तो"false". डिफ़ॉल्ट वैल्यू"false"है.अगर यह एट्रिब्यूट और
allowTaskReparenting, दोनों"true"हैं, तो इस एट्रिब्यूट की वैल्यू को प्राथमिकता दी जाएगी. गतिविधि की अफ़िनिटी को अनदेखा किया जाता है. गतिविधि को फिर से पैरंट नहीं किया जाता, बल्कि खत्म कर दिया जाता है.अगर
FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDसेट नहीं है, तो इस एट्रिब्यूट को अनदेखा कर दिया जाता है. android:hardwareAccelerated- इससे पता चलता है कि इस गतिविधि के लिए, हार्डवेयर की मदद से रेंडरिंग की सुविधा चालू है या नहीं. अगर यह सुविधा चालू है, तो
"true"और अगर चालू नहीं है, तो"false"डालें. डिफ़ॉल्ट वैल्यू"false"है.Android 3.0 और इसके बाद के वर्शन पर, ऐप्लिकेशन के लिए हार्डवेयर-ऐक्सलरेटेड OpenGL रेंडरर उपलब्ध है. इससे कई सामान्य 2D ग्राफ़िक्स ऑपरेशन की परफ़ॉर्मेंस बेहतर होती है. हार्डवेयर-ऐक्सलरेटेड रेंडरर चालू होने पर, Canvas, Paint, Xfermode, ColorFilter, Shader, और Camera में ज़्यादातर कार्रवाइयां तेज़ी से होती हैं.
इससे ऐनिमेशन और स्क्रोलिंग बेहतर होती है. साथ ही, ऐप्लिकेशन ज़्यादा तेज़ी से काम करते हैं. ऐसा उन ऐप्लिकेशन के लिए भी होता है जो फ़्रेमवर्क की OpenGL लाइब्रेरी का इस्तेमाल नहीं करते हैं. हार्डवेयर ऐक्सलरेशन को चालू करने के लिए, ज़्यादा संसाधनों की ज़रूरत होती है. इसलिए, आपका ऐप्लिकेशन ज़्यादा रैम इस्तेमाल करता है.
OpenGL 2D की सभी कार्रवाइयों को तेज़ नहीं किया जाता. अगर आपने हार्डवेयर की मदद से तेज़ी लाने वाले रेंडरर को चालू किया है, तो जांच करें कि आपका ऐप्लिकेशन बिना किसी गड़बड़ी के रेंडरर का इस्तेमाल कर सकता है या नहीं.
android:iconगतिविधि को दिखाने वाला आइकॉन. यह आइकॉन उपयोगकर्ताओं को तब दिखता है, जब स्क्रीन पर गतिविधि की जानकारी दिखाना ज़रूरी होता है. उदाहरण के लिए, टास्क शुरू करने वाली गतिविधियों के आइकॉन, लॉन्चर विंडो में दिखते हैं. इस आइकॉन के साथ अक्सर एक लेबल होता है. लेबल के बारे में जानकारी पाने के लिए,
android:labelएट्रिब्यूट देखें.इस एट्रिब्यूट को, इमेज की परिभाषा वाली ड्रॉएबल रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है. अगर इसे सेट नहीं किया गया है, तो पूरे ऐप्लिकेशन के लिए तय किया गया आइकॉन इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए,
<application>एलिमेंट काiconएट्रिब्यूट देखें.गतिविधि का आइकॉन, यहां सेट किया गया हो या
<application>एलिमेंट से सेट किया गया हो, यह गतिविधि के सभी इंटेंट फ़िल्टर के लिए डिफ़ॉल्ट आइकॉन भी होता है. ज़्यादा जानकारी के लिए,<intent-filter>एलिमेंट काiconएट्रिब्यूट देखें.android:immersive- इससे मौजूदा गतिविधि के लिए, इमर्सिव मोड की सेटिंग सेट की जाती है. अगर यह
"true"है, तोActivityInfo.flagsसदस्य के पास हमेशाFLAG_IMMERSIVEबिट सेट होता है. भले ही,setImmersive()तरीके का इस्तेमाल करके, रनटाइम के दौरान इमर्सिव मोड बदल जाए. android:labelगतिविधि के लिए, उपयोगकर्ता के पढ़ने लायक लेबल. जब उपयोगकर्ता को गतिविधि दिखाई जाती है, तब यह लेबल स्क्रीन पर दिखता है. यह अक्सर गतिविधि के आइकॉन के साथ दिखता है. अगर इस एट्रिब्यूट को सेट नहीं किया जाता है, तो पूरे ऐप्लिकेशन के लिए सेट किए गए लेबल का इस्तेमाल किया जाता है.
<application>एलिमेंट काlabelएट्रिब्यूट देखें.गतिविधि का लेबल, यहां सेट किया गया है या
<application>एलिमेंट से सेट किया गया है. यह गतिविधि के सभी इंटेंट फ़िल्टर के लिए डिफ़ॉल्ट लेबल भी होता है. ज़्यादा जानकारी के लिए,<intent-filter>एलिमेंट काlabelएट्रिब्यूट देखें.लेबल को स्ट्रिंग रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है, ताकि इसे यूज़र इंटरफ़ेस में मौजूद अन्य स्ट्रिंग की तरह स्थानीय भाषा में बदला जा सके. हालांकि, ऐप्लिकेशन डेवलप करते समय इसे सुविधा के तौर पर रॉ स्ट्रिंग के तौर पर भी सेट किया जा सकता है.
android:launchModeगतिविधि को लॉन्च करने का तरीका बताने वाला निर्देश. पांच मोड होते हैं. ये
Intentऑब्जेक्ट में मौजूद गतिविधि के फ़्लैग (FLAG_ACTIVITY_*कॉन्स्टेंट) के साथ मिलकर काम करते हैं. इससे यह तय किया जाता है कि किसी गतिविधि को इंटेंट हैंडल करने के लिए कॉल करने पर क्या होगा:"standard""singleTop""singleTask""singleInstance""singleInstancePerTask"डिफ़ॉल्ट मोड
"standard"है.नीचे दी गई टेबल में दिखाया गया है कि मोड को दो मुख्य ग्रुप में बांटा गया है. एक तरफ़
"standard"और"singleTop"गतिविधियां हैं, वहीं दूसरी तरफ़"singleTask","singleInstance", और"singleInstancePerTask"गतिविधियां हैं."standard"या"singleTop"लॉन्च मोड वाली किसी गतिविधि को कई बार इंस्टैंशिएट किया जा सकता है.ये इंस्टेंस, किसी भी टास्क से जुड़े हो सकते हैं. साथ ही, इन्हें गतिविधि के टास्क में कहीं भी रखा जा सकता है. आम तौर पर, उन्हें उस टास्क में लॉन्च किया जाता है जिसने
startActivity()को कॉल किया था. हालांकि, अगरIntentऑब्जेक्ट मेंFLAG_ACTIVITY_NEW_TASKनिर्देश शामिल है, तो कोई दूसरा टास्क चुना जाता है. ज़्यादा जानकारी के लिए,taskAffinityएट्रिब्यूट देखें.इसके उलट,
"singleTask","singleInstance", और"singleInstancePerTask"गतिविधियों के लिए अलग-अलग व्यवहार होते हैं."singleInstancePerTask"हमेशा गतिविधि टास्क के रूट में होता है. इसके अलावा, डिवाइस पर एक समय में सिर्फ़ एक"singleInstance"गतिविधि हो सकती है. वहीं,"singleInstancePerTaskगतिविधि को अलग-अलग टास्क में कई बार इंस्टैंशिएट किया जा सकता है, जबFLAG_ACTIVITY_MULTIPLE_TASKयाFLAG_ACTIVITY_NEW_DOCUMENTसेट हो."singleTask"लॉन्च मोड वाली गतिविधि में"singleInstance"और"singleInstancePerTask"के व्यवहार शामिल होते हैं: गतिविधि को कई बार इंस्टैंटिएट किया जा सकता है और इसे एक हीtaskAffinityके टास्क में कहीं भी रखा जा सकता है. हालांकि, डिवाइस में सिर्फ़ एक टास्क हो सकता है, ताकि गतिविधि के टास्क के रूट पर"singleTask"गतिविधि का पता लगाया जा सके."standard"और"singleTop"मोड में एक अंतर होता है:"standard"मोड में, हर बार किसी नई गतिविधि के लिए नया इंटेंट मिलने पर, उस इंटेंट का जवाब देने के लिए क्लास का नया इंस्टेंस बनाया जाता है. हर इंस्टेंस, एक इंटेंट को हैंडल करता है. इसी तरह, किसी नए इंटेंट को हैंडल करने के लिए,"singleTop"गतिविधि का नया इंस्टेंस भी बनाया जा सकता है.हालांकि, अगर टारगेट टास्क के स्टैक में सबसे ऊपर पहले से ही ऐक्टिविटी का कोई मौजूदा इंस्टेंस है, तो उस इंस्टेंस को
onNewIntent()कॉल में नया इंटेंट मिलता है. नया इंस्टेंस नहीं बनाया जाता. इसके अलावा, अगर"singleTop"ऐक्टिविटी का कोई मौजूदा इंस्टेंस, टारगेट टास्क में है, लेकिन स्टैक में सबसे ऊपर नहीं है या अगर वह स्टैक में सबसे ऊपर है, लेकिन टारगेट टास्क में नहीं है, तो एक नया इंस्टेंस बनाया जाता है और उसे स्टैक में पुश किया जाता है.इसी तरह, अगर उपयोगकर्ता मौजूदा स्टैक में किसी गतिविधि पर ऊपर की ओर नेविगेट करता है, तो व्यवहार, पैरंट ऐक्टिविटी के लॉन्च मोड से तय होता है. अगर पैरंट गतिविधि का लॉन्च मोड
singleTopहै याupइंटेंट मेंFLAG_ACTIVITY_CLEAR_TOPशामिल है, तो पैरंट को स्टैक में सबसे ऊपर लाया जाता है और उसकी स्थिति को बनाए रखा जाता है.नेविगेशन इंटेंट, पैरंट ऐक्टिविटी के
onNewIntent()तरीके से मिलता है. अगर पैरंट ऐक्टिविटी का लॉन्च मोडstandardहै औरupइंटेंट मेंFLAG_ACTIVITY_CLEAR_TOPशामिल नहीं है, तो मौजूदा ऐक्टिविटी और उसका पैरंट, दोनों स्टैक से हट जाते हैं. साथ ही, नेविगेशन इंटेंट पाने के लिए, पैरंट ऐक्टिविटी का नया इंस्टेंस बनाया जाता है."singleInstance"मोड,"singleTask"और"singleInstancePerTask"से सिर्फ़ एक मामले में अलग है:"singleTask"या"singleInstancePerTask"लॉन्च मोड वाली गतिविधि, अन्य गतिविधियों को अपने टास्क का हिस्सा बनने देती है. इनमें"standard"और"singleTop"गतिविधियां शामिल हैं.वहीं,
"singleInstance"गतिविधि में, किसी अन्य गतिविधि को शामिल करने की अनुमति नहीं होती. यह टास्क में मौजूद सिर्फ़ एक गतिविधि होनी चाहिए. अगर यह कोई दूसरी गतिविधि शुरू करता है, तो उस गतिविधि को किसी दूसरे टास्क को असाइन किया जाता है. ऐसा तब होता है, जबFLAG_ACTIVITY_NEW_TASKइंटेंट में मौजूद हो.इस्तेमाल के उदाहरण लॉन्च मोड क्या एक से ज़्यादा इंस्टेंस हैं? टिप्पणियां ज़्यादातर गतिविधियों के लिए सामान्य लॉन्च "standard"हां डिफ़ॉल्ट. सिस्टम हमेशा टारगेट टास्क में गतिविधि का नया इंस्टेंस बनाता है और इंटेंट को उस पर भेजता है. "singleTop"शर्तों के साथ अगर टारगेट टास्क के सबसे ऊपर ऐक्टिविटी का कोई इंस्टेंस पहले से मौजूद है, तो सिस्टम ऐक्टिविटी का नया इंस्टेंस बनाने के बजाय, इंटेंट को उस इंस्टेंस पर भेजता है. इसके लिए, वह इंस्टेंस के onNewIntent()तरीके को कॉल करता है.खास लॉन्च
(सामान्य इस्तेमाल के लिए इसका सुझाव नहीं दिया जाता)"singleTask"शर्तों के साथ सिस्टम, नई टास्क के रूट पर गतिविधि बनाता है या उसी अफ़िनिटी वाली मौजूदा टास्क पर गतिविधि का पता लगाता है. अगर गतिविधि का कोई इंस्टेंस पहले से मौजूद है और वह टास्क के रूट पर है, तो सिस्टम नया इंस्टेंस बनाने के बजाय, इंटेंट को मौजूदा इंस्टेंस पर भेजता है. इसके लिए, वह इंस्टेंस के onNewIntent()तरीके को कॉल करता है."singleInstance"नहीं यह "singleTask"की तरह ही काम करता है. हालांकि, इसमें सिस्टम, इंस्टेंस को होल्ड करने वाले टास्क में कोई अन्य गतिविधि लॉन्च नहीं करता. गतिविधि हमेशा अपने टास्क की एकमात्र सदस्य होती है."singleInstancePerTask"शर्तों के साथ यह गतिविधि, टास्क की सिर्फ़ रूट गतिविधि के तौर पर चल सकती है. रूट गतिविधि, टास्क बनाने वाली पहली गतिविधि होती है. इसलिए, किसी टास्क में इस गतिविधि का सिर्फ़ एक इंस्टेंस होता है. हालांकि, इस गतिविधि को अलग-अलग टास्क में कई बार इंस्टैंशिएट किया जा सकता है. ऊपर दी गई टेबल में दिखाया गया है कि
"standard"डिफ़ॉल्ट मोड है और यह ज़्यादातर तरह की गतिविधियों के लिए सही है."singleTop", कई तरह की गतिविधियों के लिए एक सामान्य और उपयोगी लॉन्च मोड भी है. अन्य मोड,"singleTask","singleInstance", और"singleInstancePerTask", ज़्यादातर ऐप्लिकेशन के लिए सही नहीं हैं. इनसे एक ऐसा इंटरैक्शन मॉडल बनता है जिसके बारे में उपयोगकर्ताओं को शायद जानकारी न हो. साथ ही, यह मॉडल ज़्यादातर अन्य ऐप्लिकेशन से बहुत अलग होता है.लॉन्च मोड कोई भी चुना गया हो, यह पक्का करें कि लॉन्च के दौरान और 'वापस जाएं' बटन का इस्तेमाल करके, अन्य गतिविधियों और टास्क से वापस इस गतिविधि पर नेविगेट करते समय, गतिविधि के इस्तेमाल की जांच की गई हो.
लॉन्च मोड और
Intentफ़्लैग के साथ उनके इंटरैक्शन के बारे में ज़्यादा जानने के लिए, टास्क और बैक स्टैक लेख पढ़ें.android:lockTaskMode- इस सेटिंग से यह तय होता है कि डिवाइस के लॉक टास्क मोड में चलने के दौरान, सिस्टम इस गतिविधि को कैसे दिखाता है.
Android, लॉक टास्क मोड में टास्क चला सकता है. यह मोड, कीऑस्क मोड की तरह काम करता है. लॉक टास्क मोड में सिस्टम के चलने पर, डिवाइस के उपयोगकर्ता आम तौर पर सूचनाएं नहीं देख सकते, अनुमति वाली सूची में शामिल नहीं किए गए ऐप्लिकेशन को ऐक्सेस नहीं कर सकते या होम स्क्रीन पर वापस नहीं जा सकते. हालांकि, अगर Home ऐप्लिकेशन को अनुमति वाली सूची में शामिल किया गया है, तो वे ऐसा कर सकते हैं.
सिस्टम के लॉक टास्क मोड में होने पर, सिर्फ़ वे ऐप्लिकेशन चल सकते हैं जिन्हें डिवाइस नीति कंट्रोलर (डीपीसी) ने अनुमति दी है. हालांकि, सिस्टम और खास अनुमतियां वाले ऐप्लिकेशन, लॉक टास्क मोड में चल सकते हैं. इसके लिए, उन्हें अनुमति वाली सूची में शामिल करने की ज़रूरत नहीं होती.
वैल्यू, यहां दी गई
R.attr.lockTaskModeस्ट्रिंग वैल्यू में से कोई एक हो सकती है:मान ब्यौरा "normal"डिफ़ॉल्ट वैल्यू. यह डिफ़ॉल्ट वैल्यू होती है. टास्क, लॉक टास्क मोड में लॉन्च नहीं होते हैं. हालाँकि, startLockTask()को कॉल करके, उन्हें लॉक टास्क मोड में रखा जा सकता है."never"टास्क,
lockTaskमोड में लॉन्च नहीं होते हैं. साथ ही, डिवाइस का उपयोगकर्ता इन टास्क को हाल ही के ऐप्लिकेशन वाली स्क्रीन से पिन नहीं कर सकता.ध्यान दें: यह मोड सिर्फ़ सिस्टम और खास ऐप्लिकेशन के लिए उपलब्ध है. इस वैल्यू वाले नॉन-प्रिविलेज्ड ऐप्लिकेशन को
normalके तौर पर माना जाता है."if_whitelisted"अगर डीपीआई, DevicePolicyManager.setLockTaskPackages()का इस्तेमाल करके इस पैकेज को अनुमति देता है, तो यह मोडalwaysके जैसा ही होता है. हालांकि, इसमें गतिविधि कोstopLockTask()को कॉल करना होता है, ताकि वह लॉक किया गया आखिरी टास्क पूरा कर सके. अगर DPC इस पैकेज को अनुमति नहीं देता है, तो यह मोडnormalके जैसा ही होता है."always"इस गतिविधि से जुड़े टास्क हमेशा लॉक टास्क मोड में लॉन्च होते हैं. अगर इस टास्क को लॉन्च करते समय सिस्टम पहले से ही लॉक टास्क मोड में है, तो नया टास्क मौजूदा टास्क के ऊपर लॉन्च किया जाता है. इस मोड में लॉन्च किए गए टास्क,
finish()को कॉल करके लॉक टास्क मोड से बाहर निकल सकते हैं.ध्यान दें: यह मोड सिर्फ़ सिस्टम और खास ऐप्लिकेशन के लिए उपलब्ध है. इस वैल्यू वाले नॉन-प्रिविलेज्ड ऐप्लिकेशन को
normalके तौर पर माना जाता है.इस एट्रिब्यूट को एपीआई लेवल 23 में पेश किया गया था.
android:maxRecents- हाल ही के ऐप्लिकेशन स्क्रीन पर, इस गतिविधि से जुड़े टास्क की ज़्यादा से ज़्यादा संख्या. जब यह संख्या पूरी हो जाती है, तो सिस्टम, हाल ही में इस्तेमाल किए गए ऐप्लिकेशन की स्क्रीन से, सबसे कम समय पहले इस्तेमाल किए गए ऐप्लिकेशन को हटा देता है. मान्य वैल्यू, 1 से 50 तक के पूर्णांक होते हैं. हालांकि, कम मेमोरी वाले डिवाइसों पर यह वैल्यू 1 से 25 तक होती है. शून्य अमान्य है. डिफ़ॉल्ट वैल्यू 16 है.
android:maxAspectRatio-
गतिविधि के लिए ज़्यादा से ज़्यादा आसपेक्ट रेशियो.
अगर ऐप्लिकेशन को ज़्यादा आसपेक्ट रेशियो वाले डिवाइस पर चलाया जाता है, तो सिस्टम ऐप्लिकेशन को अपने-आप लेटरबॉक्स कर देता है. इससे स्क्रीन के कुछ हिस्से इस्तेमाल नहीं किए जाते, ताकि ऐप्लिकेशन को तय किए गए ज़्यादा से ज़्यादा आसपेक्ट रेशियो पर चलाया जा सके.
ज़्यादा से ज़्यादा आसपेक्ट रेशियो को दशमलव के तौर पर दिखाया जाता है. यह डिवाइस के लंबे डाइमेंशन को छोटे डाइमेंशन से भाग देने पर मिलता है. उदाहरण के लिए, अगर ज़्यादा से ज़्यादा आसपेक्ट रेशियो 7:3 है, तो इस एट्रिब्यूट की वैल्यू को 2.33 पर सेट करें.
पहनने योग्य डिवाइसों के अलावा अन्य डिवाइसों पर, इस एट्रिब्यूट की वैल्यू 1.33 या इससे ज़्यादा होनी चाहिए. वियरेबल डिवाइसों पर, यह 1.0 या इससे ज़्यादा होना चाहिए. ऐसा न होने पर, सिस्टम सेट की गई वैल्यू को अनदेखा कर देता है.
इस एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, R.attr.maxAspectRatio देखें.
android:minAspectRatio-
गतिविधि के लिए कम से कम आसपेक्ट रेशियो.
अगर ऐप्लिकेशन को कम आसपेक्ट रेशियो वाले डिवाइस पर चलाया जाता है, तो सिस्टम ऐप्लिकेशन को अपने-आप लेटरबॉक्स कर देता है. इससे स्क्रीन के कुछ हिस्से इस्तेमाल नहीं किए जाते, ताकि ऐप्लिकेशन को तय किए गए कम से कम आसपेक्ट रेशियो पर चलाया जा सके.
कम से कम आसपेक्ट रेशियो, डिवाइस के लंबे डाइमेंशन को छोटे डाइमेंशन से भाग देने पर मिलने वाले भागफल के दशमलव रूप में दिखाया जाता है. उदाहरण के लिए, अगर डिसप्ले आसपेक्ट रेशियो 4:3 है, तो कम से कम आसपेक्ट रेशियो की वैल्यू 1.33 पर सेट करें.
वैल्यू 1.0 या इससे ज़्यादा होनी चाहिए. ऐसा न होने पर, सिस्टम सेट की गई वैल्यू को अनदेखा कर देता है.
इस एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, R.attr.minAspectRatio देखें.
android:multiprocess- इससे पता चलता है कि गतिविधि के किसी इंस्टेंस को उस कॉम्पोनेंट की प्रोसेस में लॉन्च किया जा सकता है जिसने इसे शुरू किया था या नहीं. अगर ऐसा किया जा सकता है, तो
"true"और अगर ऐसा नहीं किया जा सकता, तो"false". डिफ़ॉल्ट वैल्यू"false"है.आम तौर पर, किसी गतिविधि का नया इंस्टेंस, उसे तय करने वाले ऐप्लिकेशन की प्रोसेस में लॉन्च किया जाता है. इसलिए, गतिविधि के सभी इंस्टेंस एक ही प्रोसेस में चलते हैं. हालांकि, अगर इस फ़्लैग को
"true"पर सेट किया जाता है, तो गतिविधि के इंस्टेंस कई प्रोसेस में चल सकते हैं. इससे सिस्टम को उन इंस्टेंस को बनाने की अनुमति मिलती है जहां उनका इस्तेमाल किया जाता है. हालांकि, ऐसा तब ही होता है, जब अनुमतियां इसकी अनुमति देती हैं. ऐसा शायद ही कभी ज़रूरी होता है या ऐसा करना सही होता है. android:name- गतिविधि को लागू करने वाली क्लास का नाम. यह
Activityकी सबक्लास होती है. एट्रिब्यूट की वैल्यू आम तौर पर पूरी तरह क्वालिफ़ाइड क्लास का नाम होता है. जैसे,"com.example.project.ExtracurricularActivity". हालांकि, अगर नाम का पहला अक्षर अवधि है, जैसे कि".ExtracurricularActivity", तो इसेbuild.gradleफ़ाइल में दिए गए नेमस्पेस में जोड़ दिया जाता है.ऐप्लिकेशन पब्लिश करने के बाद, इस नाम को न बदलें. हालांकि, अगर आपने
android:exported="false"सेट किया है, तो नाम बदला जा सकता है. कोई डिफ़ॉल्ट वैल्यू नहीं है. नाम बताना ज़रूरी है. android:noHistory- जब उपयोगकर्ता किसी गतिविधि से दूर चला जाता है और वह स्क्रीन पर नहीं दिखती है, तो क्या गतिविधि को गतिविधि स्टैक से हटा दिया जाता है और
finish()तरीके को कॉल करके उसे खत्म कर दिया जाता है. अगर यह पूरा हो गया है, तो"true"और अगर नहीं हुआ है, तो"false"डालें. डिफ़ॉल्ट वैल्यू"false"है."true"वैल्यू का मतलब है कि गतिविधि का कोई पुराना निशान नहीं रहता. यह टास्क के लिए गतिविधि स्टैक में नहीं रहता. इसलिए, उपयोगकर्ता इस पर वापस नहीं जा सकता. इस मामले में, अगर आपने इस गतिविधि से नतीजे पाने के लिए कोई दूसरी गतिविधि शुरू की है, तोonActivityResult()को कभी कॉल नहीं किया जाता.इस एट्रिब्यूट को एपीआई लेवल 3 में पेश किया गया था.
android:parentActivityName- गतिविधि के लॉजिकल पैरंट का क्लास नेम. यहां दिया गया नाम,
<activity>एलिमेंट केandroid:nameएट्रिब्यूट को दिए गए क्लास के नाम से मेल खाना चाहिए.सिस्टम इस एट्रिब्यूट को पढ़कर यह तय करता है कि जब उपयोगकर्ता कार्रवाई बार में मौजूद 'ऊपर जाएं' बटन पर टैप करता है, तो कौनसी गतिविधि शुरू करनी है. सिस्टम इस जानकारी का इस्तेमाल,
TaskStackBuilderके साथ पिछली गतिविधियों का बैक स्टैक बनाने के लिए भी कर सकता है.एपीआई लेवल 4 से 16 के साथ काम करने के लिए,
<meta-data>एलिमेंट का इस्तेमाल करके पैरंट ऐक्टिविटी का एलान भी किया जा सकता है. यह एलिमेंट,"android.support.PARENT_ACTIVITY"के लिए वैल्यू तय करता है:<activity android:name="com.example.app.ChildActivity" android:label="@string/title_child_activity" android:parentActivityName="com.example.app.MainActivity" > <!-- Parent activity meta-data to support API level 4+ --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.app.MainActivity" /> </activity>
अप नेविगेशन की सुविधा के लिए, पैरंट ऐक्टिविटी का एलान करने के बारे में ज़्यादा जानने के लिए, अप नेविगेशन की सुविधा उपलब्ध कराना लेख पढ़ें.
इस एट्रिब्यूट को एपीआई लेवल 16 में पेश किया गया था.
android:persistableModeइससे यह तय होता है कि डिवाइस रीस्टार्ट होने पर, किसी गतिविधि के इंस्टेंस को टास्क में कैसे सेव किया जाता है.
अगर किसी टास्क की रूट ऐक्टिविटी, इस एट्रिब्यूट की वैल्यू को
persistRootOnlyपर सेट करती है, तो सिर्फ़ रूट ऐक्टिविटी को सेव किया जाता है. ऐसा न होने पर, टास्क के बैक स्टैक में मौजूद गतिविधियों की जांच की जाती है. इनमें से जिन गतिविधियों के लिए इस एट्रिब्यूट की वैल्यूpersistAcrossRebootsपर सेट होती है उन्हें सेव कर लिया जाता है.इस एट्रिब्यूट का इस्तेमाल करने पर, आपको इसकी वैल्यू इनमें से किसी एक पर सेट करनी होगी:
मान ब्यौरा persistRootOnlyडिफ़ॉल्ट वैल्यू. सिस्टम के रीस्टार्ट होने पर, गतिविधि टास्क को सेव करके रखा जाता है. हालांकि, सिर्फ़ रूट गतिविधि के लॉन्चिंग इंटेंट का इस्तेमाल किया जाता है.
जब आपके ऐप्लिकेशन को लॉन्च करने का इंटेंट, ऐप्लिकेशन की रूट ऐक्टिविटी को लोड करता है, तो ऐक्टिविटी को
PersistableBundleऑब्जेक्ट नहीं मिलता. इसलिए, डिवाइस को रीस्टार्ट करने पर, अपने ऐप्लिकेशन की रूट गतिविधि की स्थिति को बनाए रखने के लिए,onSaveInstanceState()का इस्तेमाल न करें.ध्यान दें: इस एट्रिब्यूट की वैल्यू से, आपके ऐप्लिकेशन के व्यवहार पर सिर्फ़ तब असर पड़ता है, जब इसे आपके ऐप्लिकेशन की रूट ऐक्टिविटी पर सेट किया गया हो.
persistAcrossRebootsइस ऐक्टिविटी की स्थिति को बनाए रखा जाता है. साथ ही, बैक स्टैक में ऊपर की हर उस ऐक्टिविटी की स्थिति को भी बनाए रखा जाता है जिसके लिए
persistableModeएट्रिब्यूट कोpersistAcrossRebootsपर सेट किया गया है. अगर किसी गतिविधि मेंpersistableModeएट्रिब्यूट कोpersistAcrossRebootsपर सेट नहीं किया गया है या उसेIntent.FLAG_ACTIVITY_NEW_DOCUMENTफ़्लैग का इस्तेमाल करके लॉन्च किया गया है, तो उस गतिविधि को सेव नहीं किया जाता. साथ ही, पिछली गतिविधियों के स्टैक में सबसे ऊपर मौजूद सभी गतिविधियों को भी सेव नहीं किया जाता.जब कोई इंटेंट, ऐसी गतिविधि को लोड करता है जिसका
persistableModeएट्रिब्यूट आपके ऐप्लिकेशन मेंpersistAcrossRebootsपर सेट होता है, तो गतिविधि कोonCreate()तरीके मेंPersistableBundleऑब्जेक्ट मिलता है. इसलिए, डिवाइस को रीस्टार्ट करने पर भी किसी गतिविधि की स्थिति को बनाए रखने के लिए,onSaveInstanceState()का इस्तेमाल किया जा सकता है. हालांकि, ऐसा तब तक किया जा सकता है, जब तक उसकेpersistableModeएट्रिब्यूट कोpersistAcrossRebootsपर सेट किया गया हो.ध्यान दें: इस एट्रिब्यूट की वैल्यू से, आपके ऐप्लिकेशन के व्यवहार पर असर पड़ता है. भले ही, इसे आपके ऐप्लिकेशन की रूट गतिविधि के अलावा किसी अन्य गतिविधि पर सेट किया गया हो.
persistNeverगतिविधि की स्थिति को सुरक्षित नहीं रखा जाता.
ध्यान दें: इस एट्रिब्यूट की वैल्यू से, आपके ऐप्लिकेशन के व्यवहार पर सिर्फ़ तब असर पड़ता है, जब इसे आपके ऐप्लिकेशन की रूट ऐक्टिविटी पर सेट किया गया हो.
इस एट्रिब्यूट को एपीआई लेवल 21 में पेश किया गया था.
android:permission- यह उस अनुमति का नाम है जो क्लाइंट के पास गतिविधि शुरू करने के लिए होनी चाहिए. इसके अलावा, क्लाइंट के पास किसी इंटेंट का जवाब पाने के लिए भी यह अनुमति होनी चाहिए. अगर
startActivity()याstartActivityForResult()के कॉलर को बताई गई अनुमति नहीं दी जाती है, तो उसका इंटेंट गतिविधि को नहीं भेजा जाता.अगर यह एट्रिब्यूट सेट नहीं किया जाता है, तो गतिविधि पर
<application>एलिमेंट केpermissionएट्रिब्यूट से सेट की गई अनुमति लागू होती है. अगर दोनों में से कोई भी एट्रिब्यूट सेट नहीं किया गया है, तो गतिविधि को अनुमति से सुरक्षित नहीं किया जाता.अनुमतियों के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट की खास जानकारी वाले पेज पर मौजूद अनुमतियां सेक्शन और सुरक्षा से जुड़े सुझाव देखें.
android:processउस प्रोसेस का नाम जिसमें गतिविधि चलती है. आम तौर पर, किसी ऐप्लिकेशन के सभी कॉम्पोनेंट, ऐप्लिकेशन के लिए बनाए गए डिफ़ॉल्ट प्रोसेस नेम में चलते हैं. इसलिए, आपको इस एट्रिब्यूट का इस्तेमाल करने की ज़रूरत नहीं होती. हालांकि, अगर ज़रूरी हो, तो इस एट्रिब्यूट का इस्तेमाल करके डिफ़ॉल्ट प्रोसेस के नाम को बदला जा सकता है. इससे आपको अपने ऐप्लिकेशन के कॉम्पोनेंट को कई प्रोसेस में फैलाने की सुविधा मिलती है.
अगर इस एट्रिब्यूट को असाइन किया गया नाम, कोलन (
:) से शुरू होता है, तो ज़रूरत पड़ने पर एक नई प्रोसेस बनाई जाती है. यह प्रोसेस, ऐप्लिकेशन के लिए निजी होती है. साथ ही, गतिविधि इसी प्रोसेस में चलती है.अगर प्रोसेस का नाम अंग्रेज़ी के छोटे अक्षर से शुरू होता है, तो गतिविधि उस नाम की ग्लोबल प्रोसेस में चलती है. हालांकि, इसके लिए ज़रूरी है कि उसके पास ऐसा करने की अनुमति हो. इससे अलग-अलग ऐप्लिकेशन में मौजूद कॉम्पोनेंट, एक प्रोसेस शेयर कर पाते हैं. इससे संसाधन का इस्तेमाल कम हो जाता है.
<application>एलिमेंट केprocessएट्रिब्यूट की मदद से, सभी कॉम्पोनेंट के लिए प्रोसेस का अलग डिफ़ॉल्ट नाम सेट किया जा सकता है.android:relinquishTaskIdentityइससे पता चलता है कि गतिविधि, टास्क स्टैक में मौजूद उससे ऊपर की गतिविधि को अपने टास्क आइडेंटिफ़ायर सौंपती है या नहीं. जिस टास्क की रूट ऐक्टिविटी में यह एट्रिब्यूट
"true"पर सेट होता है वह टास्क, टास्क में मौजूद अगली ऐक्टिविटी केIntentसे बेसIntentको बदल देता है.अगर अगली गतिविधि में भी यह एट्रिब्यूट
"true"पर सेट है, तो यह उसी टास्क में लॉन्च की गई किसी भी गतिविधि को बुनियादीIntentदेता है. यह प्रोसेस हर गतिविधि के लिए तब तक जारी रहती है, जब तक कोई ऐसी गतिविधि नहीं मिल जाती जिसमें इस एट्रिब्यूट को"false"पर सेट किया गया हो. डिफ़ॉल्ट वैल्यू"false"है.इस एट्रिब्यूट को
"true"पर सेट करने से, गतिविधि कोActivityManager.TaskDescriptionका इस्तेमाल करने की अनुमति भी मिलती है. इससे हाल ही के ऐप्लिकेशन वाली स्क्रीन में लेबल, रंग, और आइकॉन बदले जा सकते हैं.android:requireContentUriPermissionFromCaller-
कॉन्टेंट यूआरआई पास करते समय, इस गतिविधि को लॉन्च करने के लिए ज़रूरी अनुमतियों के बारे में बताता है. डिफ़ॉल्ट वैल्यू
noneहै. इसका मतलब है कि किसी खास अनुमति की ज़रूरत नहीं है. इस एट्रिब्यूट को सेट करने से, गतिविधि शुरू करने वाले व्यक्ति की अनुमतियों के आधार पर, गतिविधि शुरू करने की सुविधा सीमित हो जाती है. अगर अनुरोध करने वाले के पास ज़रूरी अनुमतियां नहीं हैं, तो गतिविधि शुरू करने का अनुरोध अस्वीकार कर दिया जाएगा. इसके लिए,SecurityExceptionका इस्तेमाल किया जाएगा.ध्यान दें कि नीति उल्लंघन ठीक करने के लिए,
Intent.getData(),Intent.EXTRA_STREAM, औरIntent.getClipData()में मौजूद कॉन्टेंट यूआरआई पर कार्रवाई की जाती है.यह स्ट्रिंग वैल्यू हो सकती है. इसमें '\\;' का इस्तेमाल करके, वर्णों को एस्केप किया जा सकता है. जैसे, यूनिकोड वर्ण के लिए '\\n' या '\\uxxxx';
यह इनमें से कोई एक कॉन्स्टेंट वैल्यू होनी चाहिए.
कॉन्स्टेंट मान ब्यौरा कोई नहीं 0 डिफ़ॉल्ट रूप से, किसी खास अनुमति की ज़रूरत नहीं होती. पढ़ा गया 1 यह अनुमति, कॉन्टेंट यूआरआई को पढ़ने का ऐक्सेस देने वाले को लागू करती है. readAndWrite 4 यह अनुरोध करने वाले व्यक्ति को, पास किए गए कॉन्टेंट यूआरआई को पढ़ने और लिखने, दोनों का ऐक्सेस देता है. readOrWrite 3 यह अनुमति, कॉन्टेंट यूआरआई को पास करने वाले व्यक्ति को कॉन्टेंट को पढ़ने या लिखने का ऐक्सेस देती है. लिखो 2 यह अनुमति, कॉन्टेंट यूआरआई को पास करने वाले व्यक्ति के लिए ज़रूरी है. इससे वह कॉन्टेंट यूआरआई में बदलाव कर सकता है. android:resizeableActivity-
इससे पता चलता है कि ऐप्लिकेशन, मल्टी-विंडो मोड के साथ काम करता है या नहीं.
इस एट्रिब्यूट को
<activity>या<application>एलिमेंट में सेट किया जा सकता है.इस एट्रिब्यूट को
"true"पर सेट करने पर, उपयोगकर्ता स्प्लिट-स्क्रीन और फ़्री-फ़ॉर्म मोड में गतिविधि लॉन्च कर सकता है. इस एट्रिब्यूट को"false"पर सेट करने पर, ऐप्लिकेशन को मल्टी-विंडो एनवायरमेंट के लिए टेस्ट या ऑप्टिमाइज़ नहीं किया जा सकता. सिस्टम, कंपैटबिलिटी मोड लागू होने पर भी ऐक्टिविटी को मल्टी-विंडो मोड में रख सकता है.इस एट्रिब्यूट को
"false"पर सेट करने से यह गारंटी नहीं मिलती कि स्क्रीन पर मल्टी-विंडो मोड में कोई दूसरा ऐप्लिकेशन नहीं दिख रहा है. जैसे, पिक्चर-इन-पिक्चर मोड में या अन्य डिसप्ले पर. इसलिए, इस फ़्लैग को सेट करने का मतलब यह नहीं है कि आपके ऐप्लिकेशन के पास संसाधन का खास ऐक्सेस है.अगर आपका ऐप्लिकेशन, एपीआई लेवल 24 या उसके बाद के वर्शन को टारगेट करता है और आपने इस एट्रिब्यूट के लिए कोई वैल्यू नहीं दी है, तो एट्रिब्यूट की वैल्यू डिफ़ॉल्ट रूप से
"true"पर सेट हो जाती है.अगर आपका ऐप्लिकेशन, एपीआई लेवल 31 या उसके बाद के लेवल को टारगेट करता है, तो यह एट्रिब्यूट छोटी और बड़ी स्क्रीन पर अलग-अलग तरीके से काम करता है:
- बड़ी स्क्रीन (sw >= 600dp): सभी ऐप्लिकेशन, मल्टी-विंडो मोड के साथ काम करते हैं. इस एट्रिब्यूट से यह पता चलता है कि किसी ऐप्लिकेशन का साइज़ बदला जा सकता है या नहीं. इससे यह पता नहीं चलता कि ऐप्लिकेशन मल्टी-विंडो मोड के साथ काम करता है या नहीं. अगर
resizeableActivity="false"है, तो डिसप्ले डाइमेंशन के मुताबिक ऐप्लिकेशन को कंपैटिबिलिटी मोड में डाल दिया जाता है. - छोटी स्क्रीन (sw < 600dp): अगर
resizeableActivity="true"और गतिविधि की कम से कम चौड़ाई और कम से कम ऊंचाई, मल्टी-विंडो की ज़रूरी शर्तों के मुताबिक है, तो ऐप्लिकेशन मल्टी-विंडो मोड के साथ काम करता है. अगरresizeableActivity="false"है, तो ऐप्लिकेशन मल्टी-विंडो मोड के साथ काम नहीं करता. भले ही, गतिविधि की कम से कम चौड़ाई और लंबाई कुछ भी हो.
किसी टास्क की रूट ऐक्टिविटी की वैल्यू, टास्क में लॉन्च की गई सभी अतिरिक्त ऐक्टिविटी पर लागू होती है. इसका मतलब है कि अगर किसी टास्क की रूट गतिविधि का साइज़ बदला जा सकता है, तो सिस्टम उस टास्क की अन्य सभी गतिविधियों को भी साइज़ बदलने की सुविधा के साथ उपलब्ध कराता है. अगर रूट गतिविधि का साइज़ नहीं बदला जा सकता, तो टास्क में मौजूद अन्य गतिविधियों का साइज़ भी नहीं बदला जा सकता.
ध्यान दें: किसी टास्क की रूट ऐक्टिविटी की वैल्यू, टास्क में लॉन्च की गई सभी अतिरिक्त ऐक्टिविटी पर लागू होती है. इसका मतलब है कि अगर किसी टास्क की रूट ऐक्टिविटी का साइज़ बदला जा सकता है, तो सिस्टम उस टास्क की अन्य सभी ऐक्टिविटी को भी साइज़ बदलने की सुविधा के साथ उपलब्ध कराता है. अगर रूट गतिविधि का साइज़ नहीं बदला जा सकता, तो टास्क में मौजूद अन्य गतिविधियों का साइज़ भी नहीं बदला जा सकता.
- बड़ी स्क्रीन (sw >= 600dp): सभी ऐप्लिकेशन, मल्टी-विंडो मोड के साथ काम करते हैं. इस एट्रिब्यूट से यह पता चलता है कि किसी ऐप्लिकेशन का साइज़ बदला जा सकता है या नहीं. इससे यह पता नहीं चलता कि ऐप्लिकेशन मल्टी-विंडो मोड के साथ काम करता है या नहीं. अगर
android:screenOrientationगतिविधि के लिए अनुरोध किया गया ओरिएंटेशन.
जब कोई गतिविधि पूरी स्क्रीन पर दिखती है, तो अनुरोध किया गया ओरिएंटेशन, उस स्क्रीन के ओरिएंटेशन को अनुरोध की गई वैल्यू से मैच करने के लिए सुझाव के तौर पर काम करता है. इस वजह से, स्क्रीन का ओरिएंटेशन, डिवाइस के फ़िज़िकल ओरिएंटेशन से अलग हो सकता है. ऐसे में, ऐप्लिकेशन का इस्तेमाल जारी रखने के लिए, उपयोगकर्ता को डिवाइस को घुमाना होगा. Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर, डिवाइस बनाने वाली कंपनियां, डिवाइस की अलग-अलग स्क्रीन (जैसे कि फ़ोल्ड किए जा सकने वाले डिवाइस की टैबलेट के साइज़ वाली स्क्रीन) को इस सुझाव को अनदेखा करने के लिए कॉन्फ़िगर कर सकती हैं. इसके बजाय, वे किसी गतिविधि को डिवाइस के उपयोगकर्ता के पसंदीदा ओरिएंटेशन में लेटरबॉक्स करने के लिए मजबूर कर सकती हैं. इससे गतिविधि का ओरिएंटेशन, अनुरोध किए गए ओरिएंटेशन से मैच हो जाता है. इसके लिए, उपयोगकर्ता को अपने डिवाइस को घुमाने की ज़रूरत नहीं पड़ती.
मल्टी-विंडो मोड में, अनुरोध किया गया ओरिएंटेशन, पूरे ओरिएंटेशन के लिए सुझाव के तौर पर काम नहीं करता. अगर गतिविधि लेटरबॉक्स की गई है, तो अनुरोध किए गए ओरिएंटेशन से, गतिविधि पर लागू लेटरबॉक्सिंग पर असर पड़ता है.
इसकी वैल्यू इनमें से कोई भी स्ट्रिंग हो सकती है:
"unspecified"डिफ़ॉल्ट वैल्यू. सिस्टम, स्क्रीन की दिशा चुनता है. यह जिस नीति का इस्तेमाल करता है और इसलिए, खास संदर्भों में लिए गए फ़ैसले, डिवाइस के हिसाब से अलग-अलग हो सकते हैं. "behind"गतिविधि स्टैक में, इसके ठीक नीचे मौजूद गतिविधि के जैसा ओरिएंटेशन. "landscape"लैंडस्केप ओरिएंटेशन (डिसप्ले की चौड़ाई, लंबाई से ज़्यादा होती है). "portrait"पोर्ट्रेट ओरिएंटेशन (डिसप्ले की लंबाई, चौड़ाई से ज़्यादा होती है). "reverseLandscape"स्क्रीन की दिशा, सामान्य लैंडस्केप से अलग दिशा में. इसे एपीआई लेवल 9 में जोड़ा गया है. "reversePortrait"पोर्ट्रेट ओरिएंटेशन, सामान्य पोर्ट्रेट से दूसरी दिशा में. इसे एपीआई लेवल 9 में जोड़ा गया है. "sensorLandscape"लैंडस्केप ओरिएंटेशन, लेकिन डिवाइस के सेंसर के आधार पर यह सामान्य या रिवर्स लैंडस्केप हो सकता है. इस सेंसर का इस्तेमाल तब भी किया जाता है, जब उपयोगकर्ता ने सेंसर पर आधारित रोटेशन की सुविधा को लॉक किया हो. इसे एपीआई लेवल 9 में जोड़ा गया है. "sensorPortrait"पोर्ट्रेट ओरिएंटेशन, लेकिन डिवाइस के सेंसर के आधार पर यह सामान्य या रिवर्स पोर्ट्रेट हो सकता है. इस सेंसर का इस्तेमाल तब भी किया जाता है, जब उपयोगकर्ता ने सेंसर पर आधारित रोटेशन की सुविधा को लॉक किया हो. हालांकि, डिवाइस के कॉन्फ़िगरेशन के आधार पर, स्क्रीन को पूरी तरह से घुमाने की अनुमति नहीं दी जा सकती. इसे एपीआई लेवल 9 में जोड़ा गया है. "userLandscape"लैंडस्केप ओरिएंटेशन, लेकिन डिवाइस के सेंसर और उपयोगकर्ता की पसंद के आधार पर, यह सामान्य या रिवर्स लैंडस्केप हो सकता है. इसे एपीआई लेवल 18 में जोड़ा गया है. "userPortrait"पोर्ट्रेट ओरिएंटेशन, लेकिन डिवाइस के सेंसर और उपयोगकर्ता की पसंद के आधार पर, यह सामान्य या रिवर्स पोर्ट्रेट हो सकता है. हालांकि, डिवाइस के कॉन्फ़िगरेशन के आधार पर, स्क्रीन को पूरी तरह से घुमाने की अनुमति नहीं दी जा सकती. इसे एपीआई लेवल 18 में जोड़ा गया है. "sensor"डिवाइस ओरिएंटेशन सेंसर, ओरिएंटेशन का पता लगाता है. डिवाइस को जिस तरह से पकड़ा जाता है उसके हिसाब से, डिसप्ले का ओरिएंटेशन तय होता है. जब उपयोगकर्ता डिवाइस को घुमाता है, तब यह बदल जाता है. हालांकि, कुछ डिवाइस डिफ़ॉल्ट रूप से चारों ओर नहीं घूमते हैं. सभी चार ओरिएंटेशन का इस्तेमाल करने के लिए, "fullSensor"का इस्तेमाल करें. अगर उपयोगकर्ता ने सेंसर के आधार पर स्क्रीन रोटेशन की सुविधा लॉक की है, तब भी इस सेंसर का इस्तेमाल किया जाता है."fullSensor"डिवाइस ओरिएंटेशन सेंसर, डिवाइस की स्क्रीन की दिशा का पता लगाता है. यह "sensor"की तरह ही है. हालांकि, इससे स्क्रीन को चार में से किसी भी ओरिएंटेशन में घुमाया जा सकता है. भले ही, डिवाइस में आम तौर पर यह सुविधा काम न करती हो. उदाहरण के लिए, कुछ डिवाइसों में आम तौर पर रिवर्स पोर्ट्रेट या रिवर्स लैंडस्केप मोड का इस्तेमाल नहीं किया जाता है. हालांकि, इस सुविधा को चालू करने पर इन मोड का इस्तेमाल किया जा सकता है. इसे एपीआई लेवल 9 में जोड़ा गया है."nosensor"स्क्रीन की दिशा का पता, फ़िज़िकल ओरिएंटेशन सेंसर के रेफ़रंस के बिना लगाया जाता है. सेंसर को अनदेखा किया जाता है. इसलिए, उपयोगकर्ता के डिवाइस को घुमाने पर भी डिसप्ले नहीं घूमता. "user"उपयोगकर्ता की मौजूदा पसंदीदा ओरिएंटेशन. "fullUser"अगर उपयोगकर्ता ने सेंसर के आधार पर स्क्रीन रोटेशन की सुविधा को लॉक किया है, तो यह userकी तरह काम करता है. ऐसा न होने पर, यहfullSensorकी तरह काम करता है और स्क्रीन को चार में से किसी भी ओरिएंटेशन में घुमाने की अनुमति देता है. इसे एपीआई लेवल 18 में जोड़ा गया है."locked"इससे स्क्रीन की दिशा को उसकी मौजूदा रोटेशन पर लॉक कर दिया जाता है. भले ही, वह कुछ भी हो. इसे एपीआई लेवल 18 में जोड़ा गया था. ध्यान दें: लैंडस्केप या पोर्ट्रेट वैल्यू में से किसी एक को सेट करने पर, गतिविधि के लिए ओरिएंटेशन की ज़रूरी शर्त पूरी हो जाती है. आपने जो वैल्यू बताई है उसके आधार पर, Google Play जैसी सेवाएं फ़िल्टर कर सकती हैं. इससे आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों पर उपलब्ध होता है जो आपकी गतिविधियों के लिए ज़रूरी ओरिएंटेशन के साथ काम करते हैं. उदाहरण के लिए, अगर आपने
"landscape","reverseLandscape"या"sensorLandscape"में से किसी एक का एलान किया है, तो आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों के लिए उपलब्ध होगा जो लैंडस्केप ओरिएंटेशन के साथ काम करते हैं.यह भी साफ़ तौर पर बताएं कि आपके ऐप्लिकेशन को
<uses-feature>एलिमेंट के साथ पोर्ट्रेट या लैंडस्केप ओरिएंटेशन की ज़रूरत है. जैसे,<uses-feature android:name="android.hardware.screen.portrait"/>. फ़िल्टर करने की यह सुविधा, Google Play और इससे जुड़ी अन्य सेवाएं उपलब्ध कराती हैं. साथ ही, प्लैटफ़ॉर्म खुद यह कंट्रोल नहीं करता कि जब कोई डिवाइस सिर्फ़ कुछ ओरिएंटेशन के साथ काम करता है, तब आपका ऐप्लिकेशन इंस्टॉल किया जा सकता है या नहीं.android:showForAllUsers-
यह विकल्प सेट करता है कि डिवाइस के मौजूदा उपयोगकर्ता के अलग होने पर, गतिविधि दिखाई जाए या नहीं. इस एट्रिब्यूट को लिटरल वैल्यू पर सेट किया जा सकता है. जैसे,
"true"या"false". इसके अलावा, इस एट्रिब्यूट को ऐसे संसाधन या थीम एट्रिब्यूट पर सेट किया जा सकता है जिसमें बूलियन वैल्यू शामिल हो.इस एट्रिब्यूट को एपीआई लेवल 23 में जोड़ा गया था.
android:stateNotNeeded- क्या गतिविधि को बंद किया जा सकता है और उसकी स्थिति को सेव किए बिना फिर से शुरू किया जा सकता है. अगर इसे पिछली स्थिति के रेफ़रंस के बिना रीस्टार्ट किया जा सकता है, तो यह
"true"है. अगर इसकी पिछली स्थिति की ज़रूरत होती है, तो यह"false"है. डिफ़ॉल्ट वैल्यू"false"है.आम तौर पर, किसी गतिविधि को कुछ समय के लिए शट डाउन करने से पहले, उसके
onSaveInstanceState()तरीके को कॉल किया जाता है, ताकि संसाधनों को बचाया जा सके. यह तरीका, गतिविधि की मौजूदा स्थिति कोBundleऑब्जेक्ट में सेव करता है. इसके बाद, गतिविधि को फिर से शुरू करने पर इसेonCreate()को पास किया जाता है. अगर इस एट्रिब्यूट को"true"पर सेट किया जाता है, तो हो सकता है किonSaveInstanceState()को कॉल न किया जाए. साथ ही,Bundleके बजायonCreate()कोnullके तौर पर पास किया जाता है. ऐसा तब होता है, जब गतिविधि पहली बार शुरू होती है."true"सेटिंग का मतलब है कि गतिविधि को फिर से शुरू किया जा सकता है. हालांकि, ऐसा करने पर उसकी स्थिति सेव नहीं की जाएगी. उदाहरण के लिए, होम स्क्रीन दिखाने वाली गतिविधि इस सेटिंग का इस्तेमाल करती है. इससे यह पक्का किया जाता है कि अगर किसी वजह से यह क्रैश हो जाती है, तो इसे हटाया न जाए. android:supportsPictureInPicture-
इससे पता चलता है कि गतिविधि में पिक्चर में पिक्चर मोड काम करता है या नहीं.
android:taskAffinityवह टास्क जिससे गतिविधि जुड़ी हुई है. एक जैसी अफ़िनिटी वाली गतिविधियां, कॉन्सेप्ट के हिसाब से एक ही टास्क से जुड़ी होती हैं. साथ ही, उपयोगकर्ता के हिसाब से एक ही "ऐप्लिकेशन" से जुड़ी होती हैं. किसी टास्क की अफ़िनिटी, उसकी रूट ऐक्टिविटी की अफ़िनिटी से तय होती है.
एफ़िनिटी से दो चीज़ें तय होती हैं: वह टास्क जिसमें गतिविधि को फिर से पैरंट किया जाता है (
allowTaskReparentingएट्रिब्यूट देखें) और वह टास्क जिसमें गतिविधि कोFLAG_ACTIVITY_NEW_TASKफ़्लैग के साथ लॉन्च करने पर रखा जाता है.डिफ़ॉल्ट रूप से, किसी ऐप्लिकेशन में की जाने वाली सभी गतिविधियों की अफ़िनिटी एक जैसी होती है. इस एट्रिब्यूट को सेट करके, उन्हें अलग-अलग ग्रुप में रखा जा सकता है. साथ ही, अलग-अलग ऐप्लिकेशन में तय की गई गतिविधियों को एक ही टास्क में रखा जा सकता है. यह बताने के लिए कि गतिविधि किसी भी टास्क से जुड़ी नहीं है, इसे खाली स्ट्रिंग पर सेट करें.
अगर इस एट्रिब्यूट को सेट नहीं किया जाता है, तो गतिविधि में ऐप्लिकेशन के लिए सेट की गई अफ़िनिटी का इस्तेमाल किया जाता है.
<application>एलिमेंट काtaskAffinityएट्रिब्यूट देखें. किसी ऐप्लिकेशन के लिए डिफ़ॉल्ट अफ़िनिटी का नाम,build.gradleफ़ाइल में सेट किया गया नेमस्पेस होता है.android:theme- यह स्टाइल रिसॉर्स का रेफ़रंस है. यह गतिविधि के लिए पूरी थीम तय करता है.
इससे गतिविधि का कॉन्टेक्स्ट अपने-आप सेट हो जाता है, ताकि इस
themeका इस्तेमाल किया जा सके. इससे गतिविधि लॉन्च होने से पहले "शुरू हो रहा है" ऐनिमेशन भी दिख सकते हैं, ताकि गतिविधि के असल लुक से बेहतर तरीके से मेल खाया जा सके.अगर इस एट्रिब्यूट को सेट नहीं किया जाता है, तो गतिविधि, ऐप्लिकेशन के लिए सेट की गई थीम को पूरे तौर पर इनहेरिट करती है. यह थीम,
<application>एलिमेंट केthemeएट्रिब्यूट से मिलती है. अगर यह एट्रिब्यूट भी सेट नहीं है, तो सिस्टम की डिफ़ॉल्ट थीम का इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए, स्टाइल और थीम देखें. android:uiOptionsकिसी गतिविधि के यूज़र इंटरफ़ेस (यूआई) के लिए अतिरिक्त विकल्प. यह इनमें से कोई एक वैल्यू होनी चाहिए.
मान ब्यौरा "none"कोई अतिरिक्त यूज़र इंटरफ़ेस विकल्प नहीं. यह डिफ़ॉल्ट विकल्प है. "splitActionBarWhenNarrow"यह कुकी, स्क्रीन पर सबसे नीचे एक बार जोड़ती है. इससे ऐप्लिकेशन बार में मौजूद कार्रवाई के आइटम दिखते हैं. इसे ऐक्शन बार भी कहा जाता है. ऐसा तब होता है, जब हॉरिज़ॉन्टल स्पेस कम होता है. जैसे, हैंडसेट पर पोर्ट्रेट मोड में होने पर. स्क्रीन पर सबसे ऊपर मौजूद ऐप्लिकेशन बार में, कार्रवाई के लिए कुछ आइटम दिखाने के बजाय, ऐप्लिकेशन बार को दो हिस्सों में बांटा गया है. पहला हिस्सा, सबसे ऊपर मौजूद नेविगेशन सेक्शन है और दूसरा हिस्सा, कार्रवाई के लिए सबसे नीचे मौजूद बार है. इसका मतलब है कि ऐक्शन आइटम के साथ-साथ, सबसे ऊपर मौजूद नेविगेशन और टाइटल एलिमेंट के लिए भी सही मात्रा में जगह उपलब्ध कराई जाती है. मेन्यू आइटम को दो बार में नहीं बांटा गया है. ये हमेशा साथ में दिखते हैं. ऐप्लिकेशन बार के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन बार जोड़ना लेख पढ़ें.
इस एट्रिब्यूट को एपीआई लेवल 14 में जोड़ा गया था.
android:windowSoftInputMode- इससे पता चलता है कि गतिविधि की मुख्य विंडो, ऑन-स्क्रीन सॉफ़्ट कीबोर्ड वाली विंडो के साथ कैसे इंटरैक्ट करती है. इस एट्रिब्यूट की सेटिंग से इन दो चीज़ों पर असर पड़ता है:
- जब गतिविधि पर उपयोगकर्ता का ध्यान केंद्रित होता है, तब सॉफ़्ट कीबोर्ड छिपा होता है या दिखता है.
- इससे पता चलता है कि गतिविधि की मुख्य विंडो का साइज़ छोटा किया गया है या नहीं, ताकि सॉफ़्ट कीबोर्ड के लिए जगह बनाई जा सके. इसके अलावा, इससे यह भी पता चलता है कि विंडो के कुछ हिस्से को सॉफ़्ट कीबोर्ड से ढके जाने पर, उसके कॉन्टेंट को पैन किया गया है या नहीं, ताकि मौजूदा फ़ोकस दिख सके.
सेटिंग, यहां दी गई टेबल में मौजूद वैल्यू में से एक होनी चाहिए. इसके अलावा, यह एक
"state..."वैल्यू और एक"adjust..."वैल्यू का कॉम्बिनेशन भी हो सकती है. किसी भी ग्रुप में एक से ज़्यादा वैल्यू सेट करने पर, नतीजे नहीं दिखते. जैसे, एक से ज़्यादा"state..."वैल्यू. यहां दी गई इमेज में दिखाया गया है कि अलग-अलग वैल्यू को वर्टिकल बार (|) से अलग किया जाता है:<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >
यहां सेट की गई वैल्यू (
"stateUnspecified"और"adjustUnspecified"के अलावा), थीम में सेट की गई वैल्यू को बदल देती हैं.मान ब्यौरा "stateUnspecified"सॉफ़्ट कीबोर्ड छिपा है या दिख रहा है, इसकी जानकारी नहीं दी गई है. सिस्टम, सही स्थिति चुनता है या थीम में मौजूद सेटिंग पर निर्भर करता है. यह सॉफ्ट कीबोर्ड के व्यवहार के लिए डिफ़ॉल्ट सेटिंग है.
"stateUnchanged"जब गतिविधि सबसे ऊपर आती है, तब सॉफ़्ट कीबोर्ड उसी स्थिति में रहता है जिसमें वह आखिरी बार था. यानी, वह दिखता है या छिपा रहता है. "stateHidden"जब उपयोगकर्ता कोई गतिविधि चुनता है, तब सॉफ़्ट कीबोर्ड छिप जाता है. इसका मतलब है कि जब उपयोगकर्ता किसी गतिविधि को छोड़कर दूसरी गतिविधि पर जाता है, तब वह गतिविधि पर वापस जाने के बजाय आगे बढ़ता है. "stateAlwaysHidden"जब गतिविधि की मुख्य विंडो में इनपुट फ़ोकस होता है, तब सॉफ़्ट कीबोर्ड हमेशा छिपा रहता है. "stateVisible"सॉफ़्ट कीबोर्ड तब दिखता है, जब उपयोगकर्ता कोई गतिविधि चुनता है. इसका मतलब है कि जब उपयोगकर्ता किसी दूसरी गतिविधि को छोड़कर, आगे की ओर नेविगेट करके गतिविधि पर जाता है, तब सॉफ़्ट कीबोर्ड दिखता है. "stateAlwaysVisible"जब विंडो को इनपुट फ़ोकस मिलता है, तब सॉफ़्ट कीबोर्ड दिखता है. "adjustUnspecified"गतिविधि की मुख्य विंडो का साइज़ बदलकर, सॉफ़्ट कीबोर्ड के लिए जगह बनाई जाती है या विंडो के कॉन्टेंट को पैन करके, फ़ोकस किए गए मौजूदा कॉन्टेंट को स्क्रीन पर दिखाया जाता है. हालांकि, यह जानकारी नहीं दी गई है कि इनमें से कौनसी कार्रवाई की जाती है. सिस्टम इनमें से किसी एक मोड को अपने-आप चुनता है. यह इस बात पर निर्भर करता है कि विंडो के कॉन्टेंट में ऐसे लेआउट व्यू हैं या नहीं जिनमें कॉन्टेंट को स्क्रोल किया जा सकता है. अगर ऐसा व्यू मौजूद है, तो विंडो का साइज़ बदल जाता है. ऐसा इसलिए होता है, क्योंकि यह माना जाता है कि स्क्रोल करने से, विंडो के सभी कॉन्टेंट को छोटे एरिया में दिखाया जा सकता है. यह मुख्य विंडो के व्यवहार के लिए डिफ़ॉल्ट सेटिंग है.
"adjustResize"स्क्रीन पर सॉफ़्ट कीबोर्ड के लिए जगह बनाने के लिए, गतिविधि की मुख्य विंडो का साइज़ हमेशा बदलता रहता है. "adjustPan"सॉफ़्ट कीबोर्ड के लिए जगह बनाने के लिए, गतिविधि की मुख्य विंडो का साइज़ नहीं बदला जाता. इसके बजाय, विंडो का कॉन्टेंट अपने-आप पैन हो जाता है, ताकि कीबोर्ड की वजह से मौजूदा फ़ोकस कभी न ढके. साथ ही, लोग हमेशा देख सकें कि वे क्या टाइप कर रहे हैं. आम तौर पर, यह विंडो का साइज़ बदलने से कम बेहतर होता है. ऐसा इसलिए, क्योंकि विंडो के छिपे हुए हिस्सों को देखने और उनसे इंटरैक्ट करने के लिए, उपयोगकर्ता को सॉफ़्ट कीबोर्ड बंद करना पड़ सकता है. "adjustNothing"सॉफ़्ट कीबोर्ड के लिए जगह बनाने के लिए, गतिविधि की मुख्य विंडो का साइज़ नहीं बदला जाता या उसे पैन नहीं किया जाता. ऐक्टिविटी, विंडो इंसर्ट का इस्तेमाल करके सॉफ़्ट कीबोर्ड के लिए जगह बनाने के लिए ज़िम्मेदार होती है. विंडो इंसर्ट को सही तरीके से हैंडल करने वाली गतिविधियों के लिए, यह सुविधा सबसे ज़्यादा कंट्रोल देती है. इससे यह तय किया जा सकता है कि स्क्रीन पर विंडो का कॉन्टेंट कैसे दिखेगा. इस एट्रिब्यूट को एपीआई लेवल 3 में पेश किया गया था.
- इसे इसमें पेश किया गया:
- और
windowSoftInputModeको छोड़कर, सभी एट्रिब्यूट के लिए एपीआई लेवल 1.- और
windowSoftInputModeको एपीआई लेवल 3 में जोड़ा गया था.noHistory - और
- यह भी देखें:
<application><activity-alias>
<गतिविधि>
इस पेज पर मौजूद कॉन्टेंट और कोड सैंपल कॉन्टेंट के लाइसेंस में बताए गए लाइसेंस के हिसाब से हैं. Java और OpenJDK, Oracle और/या इससे जुड़ी हुई कंपनियों के ट्रेडमार्क या रजिस्टर किए हुए ट्रेडमार्क हैं.
आखिरी बार 2026-07-01 (UTC) को अपडेट किया गया.
[[["समझने में आसान है","easyToUnderstand","thumb-up"],["मेरी समस्या हल हो गई","solvedMyProblem","thumb-up"],["अन्य","otherUp","thumb-up"]],[["वह जानकारी मौजूद नहीं है जो मुझे चाहिए","missingTheInformationINeed","thumb-down"],["बहुत मुश्किल है / बहुत सारे चरण हैं","tooComplicatedTooManySteps","thumb-down"],["पुराना","outOfDate","thumb-down"],["अनुवाद से जुड़ी समस्या","translationIssue","thumb-down"],["सैंपल / कोड से जुड़ी समस्या","samplesCodeIssue","thumb-down"],["अन्य","otherDown","thumb-down"]],["आखिरी बार 2026-07-01 (UTC) को अपडेट किया गया."],[],[]]