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