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