إذا كنت تستخدم شاشة بداية مخصّصة في Android 11 أو إصدار أقدم، عليك نقل تطبيقك إلى SplashScreen API للمساعدة في ضمان عرضه بشكل صحيح في Android 12 والإصدارات الأحدث.
اعتبارًا من Android 12، يطبّق النظام شاشة البداية التلقائية لنظام Android على جميع التطبيقات عند بدء تشغيلها للمرة الأولى أو عند بدء تشغيلها بعد إيقافها مؤقتًا. تلقائيًا،
يتم إنشاء شاشة البداية هذه باستخدام عنصر رمز مشغّل التطبيق
وwindowBackground لمظهره، إذا كان لونًا واحدًا.
إذا لم تنقل تطبيقك، قد تتدهور تجربة بدء تشغيل تطبيقك على Android 12 والإصدارات الأحدث أو قد تحدث نتائج غير مقصودة.
إذا تم تنفيذ شاشة البداية الحالية باستخدام مظهر مخصّص يلغي
android:windowBackground، سيستبدل النظام شاشة البداية المخصّصة بشاشة بداية تلقائية لنظام Android على Android 12 والإصدارات الأحدث. قد لا تكون هذه التجربة هي المقصودة لتطبيقك.إذا تم تنفيذ شاشة البداية الحالية باستخدام
Activityمخصّص، سيؤدي بدء تشغيل تطبيقك على الأجهزة التي تعمل بنظام التشغيل Android 12 أو إصدار أحدث إلى ظهور شاشتَي بداية مكرّرتَين: تظهر شاشة البداية الخاصة بالنظام ، يليها نشاط شاشة البداية الحالية.
يمكنك منع هذه التجارب المتدهورة أو غير المقصودة من خلال إكمال عملية النقل الموضّحة في هذا المستند. بعد النقل، تحسّن واجهة برمجة التطبيقات وقت بدء التشغيل، وتمنحك تحكّمًا كاملاً في تجربة شاشة البداية، وتنشئ تجربة بدء تشغيل أكثر اتساقًا مع التطبيقات الأخرى على النظام الأساسي.
مكتبة التوافق مع SplashScreen
يمكنك استخدام SplashScreen API مباشرةً، ولكن ننصحك بشدة باستخدام
مكتبة التوافق مع Androidx SplashScreen
بدلاً من ذلك. تستخدم مكتبة التوافق SplashScreen API، وتتيح التوافق مع الإصدارات السابقة، وتنشئ مظهرًا وإحساسًا متّسقَين لعرض شاشة البداية على جميع إصدارات Android. تمت كتابة هذا المستند باستخدام مكتبة التوافق.
إذا نقلت باستخدام SplashScreen API مباشرةً، ستبدو شاشة البداية على Android 11 والإصدارات الأقدم تمامًا كما كانت قبل النقل. اعتبارًا من Android 12، ستحمل شاشة البداية مظهر Android 12 وإحساسه.
إذا نقلت باستخدام مكتبة التوافق مع SplashScreen، يعرض النظام شاشة البداية نفسها على جميع إصدارات Android.
نقل تنفيذ شاشة البداية
أكمِل الخطوات التالية لنقل تنفيذ شاشة البداية الحالية إلى Android 12 والإصدارات الأحدث.
ينطبق هذا الإجراء على أي نوع من عمليات التنفيذ التي تنقل منها. إذا كنت تنقل من Activity مخصّص، اتّبِع أفضل
الممارسات الموضّحة في هذا المستند لتكييف
شاشة البداية المخصّصة Activity. يقلّل SplashScreen API أيضًا من وقت استجابة بدء التشغيل الذي يتم تقديمه مع نشاط شاشة بداية مخصّص.
لنقل شاشة البداية، اتّبِع الخطوات التالية:
في ملف
build.gradle، غيِّرcompileSdkVersionوضِّمن مكتبة التوافق معSplashScreenفي التبعيات.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }أنشئ مظهرًا يكون
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.في ملف البيان، استبدِل مظهر نشاط البدء بالمظهر الذي تنشئه في الخطوة السابقة.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...استدعِ
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 API لتمييز شاشة البداية بعلامتك التجارية.
إذا كنت بحاجة إلى عرض مربّع حوار، ننصحك بعرضه فوق نشاط شاشة البداية المخصّص اللاحق أو فوق النشاط الرئيسي بعد شاشة البداية الخاصة بالنظام.
إزالة نشاط شاشة البداية المخصّص
ننصحك بشكل عام بإزالة شاشة البداية المخصّصة السابقة Activity
تمامًا لتجنُّب تكرار شاشات البداية، وزيادة الكفاءة،
وتقليل أوقات تحميل شاشة البداية. هناك تقنيات مختلفة يمكنك استخدامها لتجنُّب عرض أنشطة شاشة البداية الزائدة.
استخدام التحميل المؤجّل للمكوّنات أو الوحدات أو المكتبات تجنَّب تحميل أو تهيئة المكوّنات أو المكتبات غير المطلوبة لكي يعمل التطبيق عند بدء تشغيله. حمِّلها لاحقًا عندما يحتاج إليها التطبيق.
إذا كان تطبيقك يحتاج فعلاً إلى مكوّن لكي يعمل بشكل صحيح، حمِّله فقط عندما يكون مطلوبًا فعلاً وليس في وقت بدء التشغيل، أو استخدِم سلسلة محادثات في الخلفية لتحميله بعد بدء تشغيل التطبيق. حاوِل أن يكون
Application.onCreate()بسيطًا قدر الإمكان.يمكنك أيضًا الاستفادة من استخدام مكتبة بدء تشغيل التطبيق لتهيئة المكوّنات عند بدء تشغيل التطبيق. عند إجراء ذلك، تأكَّد من مواصلة تحميل جميع الوحدات المطلوبة لنشاط البدء وعدم حدوث تأخيرات عند توفّر الوحدات التي تم تحميلها مؤقتًا.
إنشاء عنصر نائب أثناء تحميل كمية صغيرة من البيانات محليًا استخدِم أسلوب تصميم المظاهر المقترَح وأجِّل العرض إلى أن يصبح التطبيق جاهزًا. لتنفيذ شاشة بداية متوافقة مع الأنظمة القديمة، اتّبِع الخطوات الموضّحة في إبقاء شاشة البداية على الشاشة لفترات أطول.
إظهار العناصر النائبة بالنسبة إلى عمليات التحميل المستندة إلى الشبكة والتي لها مدة غير محدّدة، أغلِق شاشة البداية واعرض العناصر النائبة للتحميل غير المتزامن. ننصحك بتطبيق حركات دقيقة على منطقة المحتوى تعكس حالة التحميل. تأكَّد من أنّ بنية المحتوى الذي تم تحميله تطابق بنية الهيكل قدر الإمكان لدعم انتقال سلس عند تحميل المحتوى.
استخدام التخزين المؤقت عندما يفتح المستخدم تطبيقك للمرة الأولى، يمكنك عرض مؤشرات التحميل لبعض عناصر واجهة المستخدم، كما هو موضّح في الشكل التالي. في المرة التالية التي يعود فيها المستخدم إلى تطبيقك، يمكنك عرض هذا المحتوى المخزّن مؤقتًا أثناء تحميل محتوى أحدث.