स्प्लैश स्क्रीन लागू करने की सुविधा को Android 12 और उसके बाद के वर्शन पर माइग्रेट करना

अगर आपने Android 11 या इससे पहले के वर्शन में कस्टम स्प्लैश स्क्रीन लागू की है, तो अपने ऐप्लिकेशन को SplashScreen API पर माइग्रेट करें. इससे यह पक्का करने में मदद मिलेगी कि यह Android 12 और इसके बाद के वर्शन में सही तरीके से दिखे.

Android 12 से, सिस्टम सभी ऐप्लिकेशन के लिए कोल्ड और वॉर्म स्टार्ट पर, Android सिस्टम की डिफ़ॉल्ट स्प्लैश स्क्रीन लागू करता है. डिफ़ॉल्ट रूप से, इस सिस्टम स्प्लैश स्क्रीन को आपके ऐप्लिकेशन के लॉन्चर आइकॉन एलिमेंट और आपकी थीम के windowBackground का इस्तेमाल करके बनाया जाता है. हालांकि, ऐसा तब होता है, जब थीम में एक ही रंग हो.

अगर आपने अपने ऐप्लिकेशन को माइग्रेट नहीं किया है, तो हो सकता है कि Android 12 और इसके बाद के वर्शन पर ऐप्लिकेशन लॉन्च करने का आपका अनुभव खराब हो जाए या आपको अनचाहे नतीजे मिलें.

  • अगर आपकी मौजूदा स्प्लैश स्क्रीन, कस्टम थीम का इस्तेमाल करके लागू की गई है, जो android:windowBackground को बदल देती है, तो Android 12 और उसके बाद के वर्शन पर, सिस्टम आपकी कस्टम स्प्लैश स्क्रीन को Android सिस्टम की डिफ़ॉल्ट स्प्लैश स्क्रीन से बदल देता है. ऐसा हो सकता है कि यह आपके ऐप्लिकेशन के लिए सही न हो.

  • अगर आपकी मौजूदा स्प्लैश स्क्रीन, Activity का इस्तेमाल करके लागू की गई है, तो Android 12 या उसके बाद के वर्शन पर चलने वाले डिवाइसों पर आपका ऐप्लिकेशन लॉन्च करने पर, डुप्लीकेट स्प्लैश स्क्रीन दिखती हैं: सिस्टम स्प्लैश स्क्रीन दिखती है. इसके बाद, आपकी मौजूदा स्प्लैश स्क्रीन गतिविधि दिखती है.

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

SplashScreen compat लाइब्रेरी

SplashScreen एपीआई का सीधे तौर पर इस्तेमाल किया जा सकता है. हालांकि, हमारा सुझाव है कि इसके बजाय, Androidx SplashScreen compat लाइब्रेरी का इस्तेमाल करें. कॉम्पैट लाइब्रेरी, SplashScreen एपीआई का इस्तेमाल करती है. इससे पुराने सिस्टम के साथ काम करने की सुविधा मिलती है. साथ ही, यह सभी Android वर्शन पर स्प्लैश स्क्रीन को एक जैसा दिखाती है. यह दस्तावेज़, कंपैट लाइब्रेरी का इस्तेमाल करके लिखा गया है.

अगर आपने सीधे SplashScreen एपीआई का इस्तेमाल करके माइग्रेट किया है, तो Android 11 और इससे पहले के वर्शन पर आपकी स्प्लैश स्क्रीन, माइग्रेशन से पहले की तरह ही दिखेगी. Android 12 से, स्प्लैश स्क्रीन का लुक और फ़ील Android 12 जैसा हो जाता है.

SplashScreen कंपैट लाइब्रेरी का इस्तेमाल करके माइग्रेट करने पर, सिस्टम Android के सभी वर्शन पर एक ही स्प्लैश स्क्रीन दिखाता है.

स्प्लैश स्क्रीन लागू करने की सुविधा को माइग्रेट करना

अपनी मौजूदा स्प्लैश स्क्रीन को Android 12 और इसके बाद के वर्शन पर माइग्रेट करने के लिए, यह तरीका अपनाएं.

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

स्प्लैश स्क्रीन को माइग्रेट करने के लिए, यह तरीका अपनाएं:

  1. build.gradle फ़ाइल में, अपने compileSdkVersion को बदलें और डिपेंडेंसी में SplashScreen compat लाइब्रेरी को शामिल करें.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Theme.SplashScreen को पैरंट के तौर पर इस्तेमाल करके कोई थीम बनाएं. postSplashScreenTheme की वैल्यू को उस थीम पर सेट करें जिसका इस्तेमाल Activity को करना चाहिए. साथ ही, windowSplashScreenAnimatedIcon की वैल्यू को ड्रॉएबल या ऐनिमेशन वाले ड्रॉएबल पर सेट करें. अन्य एट्रिब्यूट की वैल्यू देना ज़रूरी नहीं है.

    <style name="Theme.App.Starting" parent="Them>e.Sp<lashScreen"
       !-- Set the splash screen background, animated icon, and anima>tion<
       duration. --
       item name="wind>owSplashSc<reenB>ackgr<ound"@color/.../item
    
       !-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated
            drawable>. On<e of these is required. --
       item name=&q>uot;windowSpl<ashSc>reen<AnimatedIcon"@drawable/.../ite>m
      < !-- Required for animated icons. --
       item na>me=<">;wind<owSplashScreenAnimationDuration"200/item
    
       !-- Set the theme of the Activity that directly f>ollo<ws your splash
       screen. This is> required. --
      < item <name=&>quot;postSplashScreenTheme"@style/Theme.App/item
    /style
    

    अगर आपको अपने आइकॉन के नीचे बैकग्राउंड का रंग जोड़ना है, तो Theme.SplashScreen.IconBackground थीम का इस्तेमाल करें और windowSplashScreenIconBackground एट्रिब्यूट सेट करें.

  3. मेनिफ़ेस्ट में, शुरुआती ऐक्टिविटी की थीम को उस थीम से बदलें जिसे आपने पिछले चरण में बनाया था.

    <manifest>
       <application android:theme="@style/Theme.App.Star>ting&<quot;
       > !-- or -<-
            activity android:theme="@style/Them>e.App.Starting"
    ...
    
  4. कॉल installSplashScreen करने से पहले, शुरुआती गतिविधि में कॉल super.onCreate() करें.

    Kotlin

    class MainActivity : Activity() {
    
       override fun onCreate(savedInstanceState: Bundle?) {
           // Handle the splash screen transition.
           val splashScreen = installSplashScreen()
    
           super.onCreate(savedInstanceState)
           setContentView(R.layout.main_activity)
    ...

    Java

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
             // Handle the splash screen transition.
             SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
    
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main_activity);
        }
    }

installSplashScreen, स्प्लैश स्क्रीन ऑब्जेक्ट दिखाता है. इसका इस्तेमाल, ऐनिमेशन को पसंद के मुताबिक बनाने या स्प्लैश स्क्रीन को ज़्यादा समय तक स्क्रीन पर रखने के लिए किया जा सकता है. ऐनिमेशन को पसंद के मुताबिक बनाने के बारे में ज़्यादा जानने के लिए, स्प्लैश स्क्रीन को ज़्यादा समय तक स्क्रीन पर रखना और स्प्लैश स्क्रीन को हटाने के लिए ऐनिमेशन को पसंद के मुताबिक बनाना लेख पढ़ें.

स्प्लैश स्क्रीन के लिए, अपनी पसंद के मुताबिक बनाई गई स्प्लैश स्क्रीन गतिविधि को स्प्लैश स्क्रीन के हिसाब से ढालना

Android 12 और इसके बाद के वर्शन के लिए, स्प्लैश स्क्रीन पर माइग्रेट करने के बाद, तय करें कि आपको अपनी पिछली कस्टम स्प्लैश स्क्रीन Activity का क्या करना है. आपके पास ये विकल्प हैं:

  • कस्टम गतिविधि को सेव करके रखें, लेकिन उसे दिखने से रोकें.
  • ब्रैंडिंग के लिए कस्टम गतिविधि को सेव करके रखें.
  • कस्टम गतिविधि हटाएं और अपने ऐप्लिकेशन को ज़रूरत के हिसाब से बदलें.

कस्टम गतिविधि को दिखने से रोकना

अगर आपकी पिछली स्प्लैश स्क्रीन Activity का इस्तेमाल मुख्य रूप से राउटिंग के लिए किया जाता है, तो इसे हटाने के तरीके देखें. उदाहरण के लिए, सीधे तौर पर असली गतिविधि से लिंक किया जा सकता है या उप-घटकों वाली किसी एक गतिविधि पर जाया जा सकता है. अगर ऐसा नहीं किया जा सकता, तो SplashScreen.setKeepOnScreenCondition का इस्तेमाल किया जा सकता है. इससे राउटिंग की गतिविधि को चालू रखा जा सकता है, लेकिन उसे रेंडर होने से रोका जा सकता है. ऐसा करने से, स्प्लैश स्क्रीन अगली गतिविधि पर ट्रांसफ़र हो जाती है और ट्रांज़िशन आसानी से हो जाता है.

Kotlin

  class RoutingActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        val splashScreen = installSplashScreen()
        super.onCreate(savedInstanceState)

        // Keep the splash screen visible for this Activity.
        splashScreen.setKeepOnScreenCondition { true }
        startSomeNextActivity()
        finish()
     }
   ...
  

Java

  public class RoutingActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      SplashScreen splashScreen = SplashScreen.installSplashScreen(this);

       super.onCreate(savedInstanceState);

       // Keep the splash screen visible for this Activity.
       splashScreen.setKeepOnScreenCondition(() -> true );
       startSomeNextActivity();
       finish();
    }
  ...
  

ब्रैंडिंग के लिए, कस्टम गतिविधि को सेव रखना

अगर आपको ब्रैंडिंग के लिए, पिछली स्प्लैश स्क्रीन Activity का इस्तेमाल करना है, तो सिस्टम स्प्लैश स्क्रीन से अपनी पसंद के मुताबिक बनाई गई स्प्लैश स्क्रीन Activity पर स्विच किया जा सकता है. इसके लिए, स्प्लैश स्क्रीन को बंद करने के लिए ऐनिमेशन को अपनी पसंद के मुताबिक बनाएं. हालांकि, अगर हो सके, तो इस स्थिति से बचें और अपनी स्प्लैश स्क्रीन को ब्रैंड करने के लिए SplashScreen API का इस्तेमाल करें.

अगर आपको डायलॉग दिखाना है, तो हमारा सुझाव है कि इसे सिस्टम स्प्लैश स्क्रीन के बाद, कस्टम स्प्लैश स्क्रीन ऐक्टिविटी या मुख्य ऐक्टिविटी के ऊपर दिखाएं.

कस्टम स्प्लैश स्क्रीन वाली गतिविधि हटाएं

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

  • अपने कॉम्पोनेंट, मॉड्यूल या लाइब्रेरी के लिए लेज़ी लोडिंग का इस्तेमाल करें. ऐसे कॉम्पोनेंट या लाइब्रेरी लोड या शुरू न करें जिनकी ज़रूरत ऐप्लिकेशन को लॉन्च के समय काम करने के लिए नहीं होती. इन्हें बाद में लोड करें, जब ऐप्लिकेशन को इनकी ज़रूरत हो.

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

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

  • स्थानीय तौर पर कम डेटा लोड करते समय, प्लेसहोल्डर बनाएं. थीम बनाने के लिए, सुझाए गए तरीके का इस्तेमाल करें. साथ ही, ऐप्लिकेशन के तैयार होने तक रेंडरिंग को रोकें. स्प्लैश स्क्रीन को लागू करने के लिए, स्प्लैश स्क्रीन को ज़्यादा समय तक स्क्रीन पर रखें में दिए गए निर्देशों का पालन करें.

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

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

पहली इमेज. यूज़र इंटरफ़ेस (यूआई) के प्लेसहोल्डर दिखाए जा रहे हैं.