نقل بيانات تنفيذ شاشة البداية إلى نظام التشغيل Android 12 والإصدارات الأحدث

في حال استخدام شاشة بداية مخصّصة في Android 11 أو الإصدارات الأقدم، عليك نقل تطبيقك إلى واجهة برمجة التطبيقات SplashScreen للمساعدة في ضمان عرضه بشكل صحيح في Android 12 والإصدارات الأحدث.

بدءًا من Android 12، يطبّق النظام شاشة الترحيب الافتراضية لنظام Android عند بدء التشغيل على البارد وإعادة التشغيل البطيء لجميع التطبيقات. بشكل افتراضي، يتم إنشاء شاشة البداية لهذا النظام باستخدام عنصر رمز مشغّل تطبيقك وwindowBackground من والمظهر، إذا كان لونًا واحدًا.

في حال عدم نقل بيانات تطبيقك، قد تنخفض تجربة تشغيله على الإصدار 12 من Android والإصدارات اللاحقة أو قد تؤدي إلى نتائج غير مقصودة.

  • إذا تم تنفيذ شاشة البداية الحالية باستخدام مظهر مخصّص يحلّ محل android:windowBackground، يستبدل النظام شاشة البداية المخصّصة بشاشة بداية تلقائية لنظام Android على الإصدار 12 من Android والإصدارات الأحدث. قد لا تكون هذه هي تجربتك المقصودة في تطبيقك.

  • إذا تم تنفيذ شاشة البداية الحالية باستخدام Activity مخصّص، يؤدي بدء تشغيل تطبيقك على الأجهزة التي تعمل بنظام التشغيل Android 12 أو الإصدارات الأحدث إلى ظهور شاشات بداية مكرّرة: شاشة البداية الخاصة بالنظام ، ثم نشاط شاشة البداية الحالية.

يمكنك منع حدوث هذه التجارب غير المقصودة أو المتدهورة من خلال إكمال عملية النقل الموضّحة في هذا المستند. بعد نقل البيانات، تحسِّن واجهة برمجة التطبيقات وقت بدء التشغيل، وتمنحك إمكانية التحكّم الكامل في تجربة شاشة البداية، وتوفّر تجربة إطلاق أكثر اتساقًا مع التطبيقات الأخرى على المنصة.

مكتبة البرامج المتوافقة لـ SplashScreen

يمكنك استخدام واجهة برمجة التطبيقات SplashScreen مباشرةً، ولكننا ننصحك بشدة باستخدام مكتبة Androidx SplashScreen compat بدلاً من ذلك. تستخدم مكتبة التوافق واجهة برمجة التطبيقات SplashScreen، وتتيح التوافق مع الإصدارات القديمة، وتُنشئ مظهرًا وأسلوبًا متسقَين لعرض شاشة البدء على جميع إصدارات Android. تمت كتابة هذا المستند باستخدام دالة التوافق المكتبة.

في حال نقل البيانات باستخدام واجهة برمجة التطبيقات SplashScreen مباشرةً على الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم، ستظهر شاشة البداية بالشكل نفسه تمامًا كما كانت قبل نقل البيانات. بدءًا من الإصدار Android 12، ستتضمّن شاشة البداية مظهر Android 12 وأسلوبه.

في حال نقل البيانات باستخدام مكتبة الأجهزة المتوافقة SplashScreen، سيعرض النظام شاشة البداية نفسها في جميع إصدارات Android

نقل عملية تنفيذ شاشة البداية

أكمِل الخطوات التالية لنقل عملية تنفيذ شاشة البداية الحالية إلى الإصدار 12 من Android والإصدارات الأحدث.

ينطبق هذا الإجراء على أي نوع من عمليات التنفيذ تريد نقله. منهم. إذا كنت بصدد نقل البيانات من 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. اتصل بـ 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 واجهة برمجة التطبيقات لعرض علامتك التجارية على شاشة البداية.

إذا كنت بحاجة إلى عرض مربع حوار، يمكننا ننصحك بعرضه على نشاط شاشة البداية المخصّص اللاحق أو فوق النشاط الرئيسي بعد شاشة البداية الخاصة بالنظام.

إزالة نشاط شاشة البداية المخصّص

بشكل عام، ننصحك بإزالة شاشة البداية المخصّصة السابقة Activity تمامًا لتجنُّب تكرار شاشات البداية، ولزيادة الكفاءة، وخفض أوقات تحميل شاشات البداية. هناك أساليب مختلفة يمكنك استخدامها لتجنُّب عرض أنشطة شاشة البداية المتكرّرة.

  • استخدِم ميزة "التحميل البطيء" للمكوّنات أو الوحدات أو المكتبات. تجنُّب التحميل أو تهيئة المكونات أو المكتبات غير المطلوبة للتطبيق عند الإطلاق. يمكنك تحميلها لاحقًا عندما يحتاج التطبيق إليها.

    إذا كان تطبيقك يحتاج حقًا إلى مكوِّن ليعمل بشكل سليم، فلا يتم تحميله إلا عندما يكون مطلوبة حقًا وليست في وقت الإطلاق، أو استخدم مؤشر ترابط في الخلفية لتحميلها بعد بدء تشغيل التطبيق. يجب إبقاء "Application.onCreate()" خفيفًا بنسبة ممكن.

    يمكنك أيضًا الاستفادة من استخدام مكتبة بدء تشغيل التطبيق لإعداد المكوّنات عند بدء تشغيل التطبيق. عند إجراء ذلك، احرص على تحميل كل الوحدات المطلوبة للنشاط الأوّلي، ولا تُدرِج أيّ تقطُّعات في الأداء عندما تصبح الوحدات التي يتم تحميلها بشكلٍ كسول متاحة.

  • أنشئ عنصر نائب أثناء تحميل قدر صغير من البيانات على الجهاز. استخدِم أسلوب تحديد المظهر المُقترَح وانتظر حتى يصبح التطبيق جاهزًا. لتنفيذ شاشة بداية متوافقة مع الأنظمة القديمة، اتّبِع الخطوات التالية: الخطوات الموضحة في إبقاء شاشة البداية على الشاشة لفترات أطول

  • إظهار العناصر النائبة بالنسبة لعمليات التحميل المستندة إلى الشبكة ذات المدد غير المحددة، إغلاق شاشة البداية وعرض العناصر النائبة للتحميل غير المتزامن ننصحك بتطبيق صور متحركة خفيفة على منطقة المحتوى تعكس حالة التحميل. تأكد من أن بنية المحتوى المحمّل تتطابق مع الهيكل العظمي بالإضافة إلى إمكانية دعم انتقال سلس عند تحميل المحتوى.

  • استخدام التخزين المؤقت: عندما يفتح المستخدِم تطبيقك لأول مرة، يمكنك عرض ومؤشرات التحميل لبعض عناصر واجهة المستخدم، كما هو موضح في الشكل التالي. في المرة التالية التي يعود فيها المستخدم إلى تطبيقك، يمكنك عرض هذا المحتوى المخزّن مؤقتًا أثناء تحميل محتوى أحدث.

الشكل 1. عرض عناصر نائبة لواجهة المستخدم