LeakCanary لـ Kotlin: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

LeakCanary لـ Kotlin: دليل شامل مع أمثلة عملية

في عالم تطوير تطبيقات Android، تُعد إدارة الذاكرة من أكثر المهام حرجاً. تسريبات الذاكرة (Memory Leaks) هي حالة يستمر فيها كائن لم يعد التطبيق بحاجة إليه في البقاء بالذاكرة بسبب مراجع ضمنية. يؤدي ذلك إلى زيادة استهلاك الذاكرة، وتوقفات متكررة لجامع القمامة (GC)، وتباطؤ في الأداء، وفي النهاية إلى خطأ OutOfMemoryError وتعطل التطبيق. LeakCanary هي مكتبة مفتوحة المصدر من Square تكتشف تلقائياً تسريبات الذاكرة في تطبيقات Android المكتوبة بلغة Java وKotlin.

لماذا تحتاج إليها؟ تصحيح تسريبات الذاكرة يدوياً عملية معقدة وتستغرق وقتاً طويلاً، وتتطلب فهماً عميقاً لـ JVM وتحليل تفريغات الذاكرة (Heap Dumps) واستخدام أدوات التنميط (Android Studio Profiler, MAT). تقوم LeakCanary بهذه المهمة نيابة عنك: فهي تتعقب تلقائياً دورة حياة Activity وFragment وViewModel والمكونات الأخرى، وإذا لم يتم جمع أي منها بواسطة جامع القمامة بعد التدمير، تقوم المكتبة بإنشاء تفريغ للذاكرة، وتحليله، وتزويدك بتقرير جاهز يوضح السلسلة الدقيقة للمراجع التي أدت إلى التسريب. يتيح ذلك للمطورين العثور على المشكلات وإصلاحها بسرعة دون قضاء ساعات في التحليل اليدوي.

يتم دمج LeakCanary في التطبيق كمكتبة وتعمل في الخلفية. لا تؤثر على تجربة المستخدم، ولكنها توفر للمطور (في إصدار التصحيح) إشعارات وسجلات مفصلة. بدءاً من الإصدار 2.x، تمت إعادة كتابة المكتبة بالكامل بلغة Kotlin، وأصبحت أكثر كفاءة وسهولة في الاستخدام. وهي تدعم أحدث مكونات Android المعمارية (Jetpack) وتسمح بتخصيص عملية اكتشاف التسريبات.

التثبيت

يتم توزيع LeakCanary عبر Maven Central. للتثبيت، أضف التبعية إلى ملف build.gradle.kts (أو build.gradle) الخاص بوحدتك (app).

هام: LeakCanary مخصص فقط لإصدارات التصحيح (debug builds). لا تقم أبداً بتضمينه في إصدار الإصدار (release) من التطبيق، حيث قد يؤثر سلباً على الأداء والأمان.

// build.gradle.kts (Module :app)
dependencies {
    // debugImplementation — المكتبة ستكون متاحة فقط في إصدار التصحيح
    debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14")
    
    // لدعم Jetpack Navigation (اختياري)
    debugImplementation("com.squareup.leakcanary:leakcanary-android-navigation:2.14")
    
    // لدعم Process Lifecycle (اختياري)
    debugImplementation("com.squareup.leakcanary:leakcanary-android-process:2.14")
}

بعد مزامنة Gradle، سيقوم LeakCanary تلقائياً بتسجيل ContentProvider الخاص به عند بدء تشغيل التطبيق. لا حاجة لأي تهيئة إضافية في الكود.

البدء السريع

أبسط مثال عملي هو مجرد تثبيت المكتبة. بعد ذلك، سيقوم LeakCanary تلقائياً بتتبع التسريبات.

1. قم بتثبيت المكتبة كما هو موضح أعلاه.

2. قم بتشغيل التطبيق في وضع التصحيح (debug mode).

3. قم بإجراء قد يسبب تسريباً (مثل تدوير الشاشة إذا كان هناك تسريب في Activity).

4. إذا تم اكتشاف تسريب، سترى إشعاراً من النظام:

إشعار LeakCanary

5. اضغط على الإشعار لفتح شاشة تحتوي على تقرير مفصل (Heap Dump Info).

مثال على كود يُحدث تسريباً للاختبار:

// مثال على تسريب: مرجع ثابت لـ Activity
class LeakyActivity : AppCompatActivity() {
    companion object {
        // المرجع الثابت سيمنع Activity من أن يتم جمعه بواسطة GC
        var leakedActivity: Activity? = null
    }

    override fun onCreate(savedInsta                    

توصيات