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

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

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

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

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

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

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

SplashScreen की साथ काम करने वाली लाइब्रेरी

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

अगर सीधे SplashScreen एपीआई का इस्तेमाल करके माइग्रेट किया जाता है, तो 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 एपीआई का इस्तेमाल करें.

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

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

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

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

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

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

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

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

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

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