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

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

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

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

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

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

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

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

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

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

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

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

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

ينطبق هذا الإجراء على أي نوع من أنواع التنفيذ التي تنتقل منها. إذا كنت تريد نقل البيانات من 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() خفيفًا قدر الإمكان.

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

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

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

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

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