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

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

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

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

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

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

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

مكتبة المشاركين في SplashScreen

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

في حال نقل البيانات باستخدام واجهة برمجة تطبيقات 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. عليك طلب الرقم 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. يتم عرض العناصر النائبة لواجهة المستخدم.