إذا نفّذت شاشة بداية مخصّصة في نظام 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
أيضًا من وقت الاستجابة
لبدء التشغيل الذي يوفّره نشاط مخصّص على شاشة البداية.
لنقل شاشة البداية، اتّبِع الخطوات التالية:
في ملف
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
لإضافة علامة تجارية لشاشة البداية.
إذا كنت بحاجة إلى عرض مربع حوار، ننصحك بعرضه فوق النشاط المخصّص التالي على شاشة البداية أو على النشاط الرئيسي بعد شاشة البداية الخاصة بالنظام.
إزالة سجلّ "النشاط على شاشة البداية" المخصّص
بشكل عام، ننصحك بإزالة شاشة البداية المخصّصة السابقة Activity
تمامًا لتجنُّب تكرار شاشات البداية ولزيادة الكفاءة
وتقليل مدة تحميل شاشات البداية. هناك تقنيات مختلفة يمكنك استخدامها لتجنب
عرض الأنشطة المتكررة على شاشة البداية.
استخدام طريقة "التحميل الكسول" للمكوّنات أو الوحدات أو المكتبات تجنَّب تحميل أو إعداد المكونات أو المكتبات غير المطلوبة ليعمل التطبيق عند تشغيله. ويمكنك تحميلها لاحقًا عندما يحتاجها التطبيق.
إذا كان تطبيقك يحتاج إلى مكوّن ليعمل بشكل صحيح، يجب تحميله فقط عند الحاجة إليه وليس عند بدء تشغيله، أو استخدام سلسلة محادثات في الخلفية لتحميله بعد بدء تشغيل التطبيق. حاول إبقاء
Application.onCreate()
خفيفًا قدر الإمكان.يمكنك أيضًا الاستفادة من استخدام مكتبة بدء تشغيل التطبيقات لإعداد المكوّنات عند بدء تشغيل التطبيق. عند إجراء ذلك، تأكد من الاستمرار في تحميل جميع الوحدات المطلوبة لنشاط البدء ولا تضع تحديثات في حالة توفر الوحدات التي تم تحميلها ببطء.
إنشاء عنصر نائب أثناء تحميل كمية صغيرة من البيانات محليًا استخدِم أسلوب اختيار المواضيع المقترَح واحتفِظ بالعرض إلى أن يصبح التطبيق جاهزًا. لاستخدام شاشة بداية متوافقة مع الأنظمة القديمة، اتّبِع الخطوات الموضّحة في إبقاء شاشة البداية على الشاشة لفترات أطول.
عرض العناصر النائبة: بالنسبة إلى عمليات التحميل المستندة إلى الشبكة ذات المدد غير المحددة، أغلِق شاشة البداية واعرض العناصر النائبة للتحميل غير المتزامن. ننصحك بتطبيق رسوم متحركة خفية في منطقة المحتوى تعكس حالة التحميل. تأكَّد من أنّ بنية المحتوى المحمَّل تتطابق مع البنية الأساسية للهيكل بقدر الإمكان لإتاحة انتقال سلس عند تحميل المحتوى.
استخدام التخزين المؤقت: عندما يفتح أحد المستخدمين تطبيقك للمرة الأولى، يمكنك عرض مؤشرات التحميل لبعض عناصر واجهة المستخدم، كما هو موضّح في الشكل التالي. وفي المرّة التالية التي يعود فيها المستخدم إلى تطبيقك، يمكنك عرض هذا المحتوى المخزَّن مؤقتًا أثناء تحميل المحتوى الأحدث.