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

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

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

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

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

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

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

SplashScreen compat library

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

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

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

स्प्लैश स्क्रीन लागू करने के तरीके को माइग्रेट करना

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

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

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

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

    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 एपीआई का इस्तेमाल करें.

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

कस्टम स्प्लैश स्क्रीन वाली ऐक्टिविटी को हटाना

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

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

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

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

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

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

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

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