मल्टी-रेज़्यूमे

Android 9 और इससे पहले के वर्शन में, ऐप्लिकेशन को PAUSED में तब शामिल किया गया था, जब:

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

इन मामलों में, ऐप्लिकेशन को रोकने की अवधि अलग-अलग हो सकती है. हालांकि, ऐसा नहीं किया जा सकता जिसे ऐप्लिकेशन के लेवल पर पहचाना जा सकता है.

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

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

पहला डायग्राम. फ़ोल्ड किए जा सकने वाले डिवाइस पर, कई फ़ाइलों को फिर से शुरू करने की सुविधा

दूसरा डायग्राम. डेस्कटॉप मोड में एक से ज़्यादा बार फिर से शुरू करें

गतिविधियां PAUSED की स्थिति में तब हो सकती हैं, जब उन पर फ़ोकस नहीं किया जा सकता या जो फ़ोकस में नहीं हैं कुछ हद तक रोका गया, जैसे:

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

यह तरीका उन ऐप्लिकेशन को बताता है जिनमें किसी गतिविधि को सिर्फ़ RESUMED स्थिति में उपयोगकर्ता. Android 10 से पहले के वर्शन में, गतिविधियों को PAUSED स्थिति में भी इनपुट मिल सकता है (उदाहरण के लिए, Android 9 वर्शन वाले डिवाइस पर, स्प्लिट स्क्रीन मोड में एक साथ दोनों गतिविधियां देखने की सुविधा मिलती है.

Android के पिछले वर्शन के फिर से शुरू किए गए सिग्नल को बनाए रखने के लिए (और यह बताने के लिए कि ऐप्लिकेशन को खास ऐक्सेस या सिंगलटन का ऐक्सेस कब मिलना चाहिए संसाधन), Android 10 में एक नया कॉलबैक शामिल है:

Activity#onTopResumedActivityChanged(boolean onTop)

लागू किए जाने पर, इस कॉलबैक को Activity#onResume() के बीच कॉल किया जाता है और Activity#onPause(). यह कॉलबैक ज़रूरी नहीं है और इसे स्किप किया जा सकता है, ताकि कोई गतिविधि RESUMED से PAUSED स्थिति में जा सके वह भी सिस्टम में टॉप पर बने रहकर. उदाहरण के लिए, मल्टी-विंडो मोड में. यह कॉलबैक ज़रूरी नहीं है. इसलिए, यह Activity का हिस्सा नहीं है लाइफ़साइकल और इसका इस्तेमाल बहुत कम करना चाहिए.

सबसे ज़्यादा शुरू की गई पिछली गतिविधि को मिलता है और इसके लागू होने की प्रोसेस पूरी होती है अगली बार फिर से शुरू की गई गतिविधि से onTopResumedActivity(false) पहले पिछली गतिविधि को छोड़कर, onTopResumedActivity(true) मिलते हैं मेथड कॉल को हैंडल करने में बहुत ज़्यादा समय लगता है और इसके बाद 500 मि॰से॰ का टाइम आउट पूरा हो जाता है.

इनके साथ काम करता है

एक से ज़्यादा बार फिर से शुरू करने की प्रोसेस लागू करते समय साथ काम करने के लिए, इन बातों को ध्यान में रखें समाधान.

एक ऐप्लिकेशन प्रक्रिया में कई गतिविधियों को फिर से शुरू किया गया

  • समस्या. Android 9 और उससे पहले वाले वर्शन में, सिस्टम में सिर्फ़ एक गतिविधि एक बार में फिर से शुरू किया गया. गतिविधियों के बीच सभी ट्रांज़िशन में फिर से शुरू करने से पहले गतिविधि. कुछ ऐप्लिकेशन और फ़्रेमवर्क (जैसे कि Flutter या Android का LocalActivityManager) इस तथ्य और फिर से शुरू की गई कार्रवाई की स्टोर स्थिति का इस्तेमाल करता है भी ट्रैक कर सकते हैं.
  • समाधान. Android 9 और उससे पहले के वर्शन में, अगर एक ही प्रोसेस की दो गतिविधियां दोनों को फिर से शुरू किया जाता है, तो सिस्टम सिर्फ़ उस गतिविधि को फिर से शुरू करता है जो Z-ऑर्डर में ज़्यादा होती है. Android 10 को टारगेट करने वाले ऐप्लिकेशन, कई गतिविधियों को सपोर्ट कर सकते हैं उसी समय फिर से शुरू किया जा रहा है.

कैमरे को एक साथ ऐक्सेस करना

  • समस्याएं. ये समस्याएं Android 9 और कम. उदाहरण के लिए, फ़ुलस्क्रीन और फिर से शुरू की गई गतिविधि से कैमरे का फ़ोकस रुकी हुई गतिविधि को ऊपर पिक्चर में पिक्चर मोड में दिखाया जाएगा, लेकिन मल्टी-विंडो और मल्टी-डिसप्ले मोड का ज़्यादा इस्तेमाल करना.
    • RESUME स्थिति में किए गए बदलावों की वजह से, हो सकता है कि ऐप्लिकेशन फिर से चालू होने पर भी कैमरे से डिसकनेक्ट हो गया. इसे ठीक करने के लिए, ऐप्लिकेशन बिना क्रैश हुए कैमरा डिसकनेक्ट होने पर उसे हैंडल करना ज़रूरी है. डिसकनेक्ट होने पर, ऐप्लिकेशन को डिसकनेक्ट किया गया कॉलबैक और एपीआई में मौजूद सभी कॉल थ्रॉइंग शुरू कर देते हैं CameraAccessException.
    • resizeableActivity=false पर खास कैमरे की गारंटी नहीं मिलती है क्योंकि कैमरे का इस्तेमाल करने वाले दूसरे ऐप्लिकेशन, दूसरे डिसप्ले पर खोले जा सकते हैं.
  • समाधान. डेवलपर को यह बताना चाहिए कि ऐप्लिकेशन कब-कब इस्तेमाल करता है कैमरे से डिसकनेक्ट हो जाता है. अगर कोई ऐप्लिकेशन कैमरे से डिसकनेक्ट हो जाता है, तो फिर से कनेक्ट करने और जारी रखने के लिए, क्या कैमरे की उपलब्धता कॉलबैक देखना चाहिए कैमरे का इस्तेमाल. मौजूदा CameraManager#AvailabilityCallback#onCameraAvailable() कॉलबैक, Android 10 को जोड़ा गया CameraManager#AvailabilityCallback#onCameraAccessPrioritiesChanged(), यह तब केस कवर करता है, जब फ़ोकस (और कैमरे की प्राथमिकता) कई फिर से शुरू की गई गतिविधियां. ऐप्लिकेशन डेवलपर को इन दोनों कॉलबैक का इस्तेमाल करना चाहिए, कैमरे को ऐक्सेस करने का सही समय तय करते हैं.

मल्टी-रेज़्यूमे

Android 10 में, गतिविधि की लाइफ़साइकल की स्थिति, 'किसको दिखे' सेटिंग और इस आधार पर तय होती है कि Z-क्रम. यह सुनिश्चित करने के लिए कि गतिविधि और मूल्यांकन करें कि कौन सी लाइफ़साइकल स्थिति लागू है, ActivityRecord#makeActiveIfNeeded() तरीका अलग है जगहें. Android 10 में, चालू का मतलब RESUMED या PAUSED और सिर्फ़ इन दो मामलों में काम करता है.

Android 10 में, किसी गतिविधि को फिर से शुरू करने का तरीका, हर स्टैक में अलग-अलग ट्रैक किया जाता है पर निर्भर रहती है. ऐसा इसलिए होता है, क्योंकि कई गतिविधि ट्रांज़िशन, मल्टी-विंडो मोड में एक साथ किए जा सकते हैं. इसके लिए जानकारी के लिए, ActivityStack#mInResumeTopActivity देखें.

सबसे ज़्यादा बार शुरू की गई गतिविधि का कॉलबैक

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

ActivityStackSupervisor#scheduleTopResumedActivityStateIfNeeded()

TopResumedActivityChangeItem पर एक नया लेन-देन आइटम जोड़ा गया राज्य में हुए बदलावों की जानकारी देने के लिए, Android 9 का ActivityLifecycler आर्किटेक्चर.

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