स्प्लैश स्क्रीन लागू करने की सुविधा को 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 API का सीधे तौर पर इस्तेमाल कर सकते हैं. हालांकि, हमारा सुझाव है कि इसके बजाय, Androidx SplashScreen compat लाइब्रेरी का इस्तेमाल करें. compat लाइब्रेरी, SplashScreen API का इस्तेमाल करती है. साथ ही, यह पुराने वर्शन के साथ काम करने की सुविधा देती है. इसके अलावा, यह सभी Android वर्शन पर स्प्लैश स्क्रीन को एक जैसा लुक और फ़ील देती है. यह दस्तावेज़, compat लाइब्रेरी का इस्तेमाल करके लिखा गया है.

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

अगर आपने SplashScreen compat लाइब्रेरी का इस्तेमाल करके माइग्रेट किया है, तो सिस्टम, 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="Theme.SplashScreen">
       <!-- Set the splash screen background, animated icon, and animation
       duration. -->
       <item name="windowSplashScreenBackground">@color/...</item>
    
       <!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated
            drawable. One of these is required. -->
       <item name="windowSplashScreenAnimatedIcon">@drawable/...</item>
       <!-- Required for animated icons. -->
       <item name="windowSplashScreenAnimationDuration">200</item>
    
       <!-- Set the theme of the Activity that directly follows your splash
       screen. This is required. -->
       <item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
    

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

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

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

    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() को जितना हो सके, उतना हल्का रखने की कोशिश करें.

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

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

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

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

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