English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

طريقة حل مشكلة الشاشة البيضاء والشاشة السوداء في واجهة الاستقبال في Android

مقدمة

أعتقد أن العديد من مطوري Android واجهوا هذا الطلب:

 1. إنشاء واجهة Splash، تحتوي على صورة خلفية مرتبطة بالتطبيق و زر البدء.
 2. عند النقر على الزر للدخول إلى الصفحة الرئيسية، لن يظهر هذا الصفحة Splash للمستخدمين مرة أخرى عند فتح التطبيق. 

أعتقد أيضًا أن العديد من الطلاب واجهوا هذا الشكوى:

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

إذا واجهت أيضًا هذه المشكلة، فاستمر في قراءة هذا المقال، سأأخذكم في تحليل وحل هذه المشكلة.

الحل

سنقدم الحل أولاً، ثم نتحليل الأسباب بشكل دقيق. لتجنب أن تكون النصوص الطويلة عائقًا أمام حماس الطلاب لتعلمهم.

الحل بسيط جدًا، يمكن تلخيصه بعبارة واحدة: إعداد موضوع لـ Splash Activity، و الذي يحتوي على: الشاشة الكاملة + الشفافية.

إضافة موضوع SplashTheme في ملف style.xml:

<style name="SplashTheme" parent="AppTheme">
 <item name="android:windowFullscreen">true</item>
 <item name="android:windowIsTranslucent">true</item>
</style>

تم تكوين موضوع SplashActivity في ملف AndroidManifest.xml:

<activity android:name=".activity.SplashActivity"
 android:theme="@style/SplashTheme">
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
</activity>

بعد من إجراء الإعدادات المذكورة أعلاه، يجب أن تكون مشكلات الشاشة البيضاء والشاشة السوداء و الشاشةActionBar قد زالت. من أجل معرفة السبب، و لفهم السبب، أتمنى أن يستمر الطلاب معي في تحليل أسباب ظهور هذه الشاشات البيضاء.

عملية بدء نافذة مكون Activity

أولاً، يُشار إلى أن هذا المقطع يعتمد بشكل كبير على مدونة لوسونغ لياو. من أجل سهولة الفهم، تم تقليص محتواه. إذا كان هناك انتهاك، سأقوم بإزالة هذا التحليل فورًا.

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

1. ActivityStack.startActivityLocked

public class ActivityStack {
 // قم بتعيينه على false لتعطيل عرض الاستعراض الذي يتم عرضه أثناء بدء نشاط جديد
 // يتم بدءه.
 static final boolean SHOW_APP_STARTING_PREVIEW = true;
 private final void startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume) {
 final int NH = mHistory.size();
 int addPos = -1;
 // وضع النشاط الجديد في أعلى القائمة، لذا يكون بجانب التفاعل
 // مع المستخدم.
 إذا (addPos < 0) {
  addPos = NH;
 }
 // ضع النشاط في قائمة التاريخ والاستمرار
 mHistory.add(addPos, r);
 إذا (NH > 0) {
  // نريد عرض نافذة عرض البدء إذا كنا
  // الانتقال إلى مهمة جديدة أو عملية النشاط التالي
  // ليس قيد التشغيل حاليًا.
  boolean showStartingIcon = newTasks;
  ProcessRecord proc = r.app;
  إذا (proc == null) {
  proc = mService.mProcessNames.get(r.processName, r.info.applicationInfo.uid);
  }
  إذا (proc == null || proc.thread == null) {
  showStartingIcon = true;
  }
 }
 }
}

لم يكن هذا النهاية بعد... نأمل أن تستمروا في متابعة الاهتمام.

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعدكم في التعلم، ونأمل أن تشجعوا دروس呐喊 بشكل أكبر.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع بجميع حقوق الملكية للمرآة، ويتم جمعه من قبل المستخدمين على الإنترنت من تلقاء نفسه، ويتم تحميله بشكل مستقل، ويملك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتوى بشكل إنساني، ولا يتحمل هذا الموقع أي مسؤولية قانونية ذات صلة. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فيرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (يرجى استبدال # بـ @ عند إرسال البريد الإلكتروني) للإبلاغ، وقدم الدليل على الادعاء، إذا تم التحقق من صحة الادعاء، سيتم حذف المحتوى المزعوم فوراً.

أفضل العروض لك