انهيار OutOfMemoryError
نص الخطأ
java.lang.OutOfMemoryError: Failed to allocate a 33177612 byte allocation with 25165824 free bytes and 24MB until OOM
السبب
يتجاوز التطبيق حد الذاكرة الذي يمنحه الجهاز. غالبًا السبب صور كبيرة أو كائنات مسرّبة أو قوائم ضخمة.
الحل خطوة بخطوة
- راقب استهلاك الذاكرة بـ
dumpsys meminfo. - حمّل الصور بحجم الشاشة لا بالحجم الكامل (Glide أو Coil أو
inSampleSize). - ابحث عن التسريبات مثل مراجع ثابتة إلى
Activityومستمعين لم يُزالوا (LeakCanary). - استخدم
RecyclerViewوالترقيم في القوائم الطويلة. largeHeapحل مؤقت فقط؛ عالج السبب الحقيقي.
أوامر للمثال
adb shell dumpsys meminfo com.example.app adb shell am dumpheap com.example.app /data/local/tmp/h.hprof # manifest <application android:largeHeap="true" ...>
كيف لا يتكرر
شغّل LeakCanary في debug وافحص ملف الذاكرة بعد كل ميزة كبيرة.
المؤلف والترخيص: Nibras Code
- APK لا يُثبَّت
- ما هو parse error؟
- ضاع ملف keystore
- التواقيع غير متطابقة
- خطأ في اسم الحزمة
- ملف APK تالف
- Play Protect يحظر التطبيق
- تبدو الحزمة غير صالحة
- لا توجد مساحة كافية
- الهاتف غير متوافق
- النسخة الأقدم لا تُثبَّت
- XAPK لا يُثبَّت
- فشل Gradle sync
- تعذّر حل الاعتمادية (Could not resolve)
- خطأ Duplicate class
- Manifest merger failed
- حد Dex: 65536 دالة
- R8: Missing class
- عدم توافق إصدار JDK
- SDK location not found
- تعارض minSdkVersion
- قيمة compileSdk منخفضة جدًا
- EAS build: فشل Gradle
- خطأ expo prebuild
- Metro: Unable to resolve module
- Hermes: خطأ JS في release فقط
- شاشة بيضاء في release
- شاشة حمراء: لا يتصل بـ Metro
- عدم توافق إصدار Expo SDK
- خطأ Capacitor sync
- Capacitor: شاشة بيضاء
- EAS: خطأ keystore وcredentials
- Keystore tampered / كلمة المرور خاطئة
- اسم alias أو كلمة مرور المفتاح خاطئة
- Play: التوقيع بمفتاح خاطئ
- INSTALL_FAILED_UPDATE_INCOMPATIBLE
- INSTALL_FAILED_VERSION_DOWNGRADE
- INSTALL_FAILED_INSUFFICIENT_STORAGE
- INSTALL_FAILED_NO_MATCHING_ABIS
- خطأ في تحليل الحزمة (Parse error)
- خطأ «App not installed»
- تثبيت ملف AAB على الهاتف
- adb: الجهاز «unauthorized»
- adb: الجهاز غير موجود
- عدم تطابق إصدار خادم adb
- Activity class does not exist
- Play: مستوى targetSdk منخفض
- Play: رفض بسبب سياسة الأذونات
- Play: شرط 64-bit
- Play: versionCode مستخدم من قبل
- انهيار ClassNotFound / NoSuchMethod
- CLEARTEXT communication not permitted
- SecurityException: الإذن مرفوض