استنزاف البطارية في تطوير التطبيقات: ما هو، الأسباب وطرق المكافحة

المؤلف: IT Sectr نُشر: 2026-07-28 وقت القراءة: 10 دق

استنزاف البطارية — واحدة من أكثر الشكاوى شيوعاً من مستخدمي التطبيقات. يبدأ التطبيق في استهلاك طاقة غير طبيعية، مما يتسبب في تفريغ سريع للجهاز حتى في الخلفية. وفقاً لـ Google I/O 2023، فإن ما يصل إلى 30% من التطبيقات على Google Play تعاني من مشاكل في استهلاك الطاقة تؤثر مباشرة على الاحتفاظ بالمستخدمين. في هذه المقالة سنستعرض الأسباب والتشخيص وطرق التحسين.

أهم النقاط

  • WakeLock — السبب الرئيسي لتسرب الطاقة إذا لم يتم تحريره في الوقت المناسب
  • طلبات الشبكة بدون تجميع تجعل وحدة الراديو تعمل باستمرار
  • الموقع عالي الدقة يستهلك طاقة أكثر 10 مرات من الموقع التقريبي
  • WorkManager — واجهة برمجة التطبيقات القياسية للمهام الخلفية مع مراعاة حالة البطارية
  • تحليل الأداء عبر Battery Historian و Energy Profiler إلزامي قبل الإصدار

ما هو استنزاف البطارية في التطبيقات؟

استنزاف البطارية — حالة يستهلك فيها التطبيق طاقة أكثر بكثير من المتوقع في سيناريوهات الاستخدام النموذجية. يلاحظ المستخدم أن الجهاز يفرغ بشكل أسرع بنسبة 20-30% بعد تثبيت أو تحديث تطبيق.

أنظمة التشغيل الحديثة — Android و iOS — لديها آليات مدمجة للتحكم في استهلاك الطاقة. يستخدم Android Battery Optimization، ويستخدم iOS Background Modes. لكن الاستخدام غير الصحيح لواجهات البرمجة قد يتجاوز هذه الآليات.

وفقاً لبحث Purdue University (2021)، حوالي 60% من التطبيقات تستهلك طاقة للمهام الخلفية دون حاجة واضحة. هذا شائع بشكل خاص في التطبيقات التي تحتوي على إعلانات وتحليلات واتصالات شبكة مستمرة.

كيف يقاس استهلاك البطارية؟

يقاس استهلاك الطاقة بوحدة mA·h (ملي أمبير في الساعة). يوفر Android البيانات عبر واجهة BatteryManager API التي تتتبع الاستهلاك لكل مكون: المعالج، وحدة الراديو، GPS، الشاشة وأجهزة الاستشعار.

kotlin
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val chargeCounter = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
val capacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
// chargeCounter / capacity * 100 = current charge percentage

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

الأسباب الرئيسية لزيادة استهلاك الطاقة

WakeLock — أخطر آلية للبطارية. إذا كان التطبيق يحتفظ بـ WakeLock دون تحريره، لا يدخل الجهاز في وضع السكون. كل ساعة من الاحتفاظ بـ WakeLock تستهلك حوالي 50-80 mA·h.

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

تحديد موقع GPS بدقة عالية (GPS_PROVIDER) يستهلك طاقة أكثر 10-15 مرة من التحديد التقريبي (NETWORK_PROVIDER). التحديث المستمر للموقع في الخلفية هو أحد أكثر شكاوى المستخدمين شيوعاً.

  • الرسوم المتحركة والعرض بدون تسريع الأجهزة يثقل GPU
  • أجهزة الاستشعار (مقياس التسارع، الجيروسكوب) في الخلفية دون حاجة
  • مسح Bluetooth بتردد عالٍ للبحث عن الأجهزة
  • التخزين المؤقت لكميات كبيرة من البيانات على بطاقة SD دون مراعاة حالة البطارية

وفقاً لـ Android Developers Blog، يستهلك التطبيق المتوسط حوالي 15% من إجمالي استهلاك بطارية الجهاز. تجاوز هذا المستوى يتطلب تدقيقاً إلزامياً لاستهلاك الطاقة.

كيفية تشخيص مشاكل البطارية؟

Battery Historian — الأداة الرسمية من Google لتحليل استهلاك الطاقة. تأخذ تفريغ BatteryStats من ADB وتصور الاستهلاك حسب المكون: المعالج، الشبكة، GPS، WakeLock والشاشة.

لإنشاء تفريغ، نفذ الأمر: adb shell dumpsys batterystats. بعد جمع البيانات لمدة 2-3 ساعات من الاستخدام العادي، يمكنك تحميل التقرير إلى Battery Historian للتحليل.

Android Energy Profiler في Android Studio يتتبع استهلاك الطاقة في الوقت الفعلي. يعرض استهلاك المعالج، الشبكة، GPS والشاشة لكل عملية تطبيق.

bash
# Reset battery stats before test
adb shell dumpsys batterystats --reset

# Use the app for 2-3 hours

# Export dump for Battery Historian
adb shell dumpsys batterystats > batterystats_dump.txt

التحليل في iOS

لـ iOS يُستخدم Energy Log عبر Xcode Instruments. يجمع بيانات استهلاك الطاقة مقسمة حسب الوحدة: المعالج، الشبكة، GPU، الشاشة، الموقع. وقت القراءة: 15-30 دقيقة لتحليل جلسة واحدة.

على جهاز iOS الفعلي، تظهر إحصائيات استهلاك الطاقة أيضاً في Settings > Battery. إذا كان التطبيق ضمن العشرة الأوائل في الاستهلاك — فهذه إشارة للتحسين.

طرق تحسين استهلاك الطاقة

WorkManager — واجهة برمجة التطبيقات القياسية للمهام الخلفية التي تراعي حالة البطارية والشبكة ووضع Doze. تضمن تنفيذ المهمة في ظروف مثالية وليس فوراً، مما يوفر حتى 40% من الطاقة في العمليات الخلفية.

kotlin
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setConstraints(
        Constraints.Builder()
            .setRequiresCharging(true)
            .setRequiresBatteryNotLow(true)
            .setRequiresNetworkType(NetworkType.CONNECTED)
            .build()
    )
    .build()
WorkManager.getInstance(this).enqueue(workRequest)

تجميع طلبات الشبكة

تجميع الطلبات — دمج عدة عمليات شبكة في جلسة اتصال واحدة. بدلاً من 10 طلبات منفصلة، يقوم التطبيق بطلب مجمع واحد، مما يقلل وقت نشاط وحدة الراديو من 30 ثانية إلى 2-3 ثوانٍ.

  • Retrofit مع OkHttp يدعم التجميع عبر Interceptor
  • Firebase Cloud Messaging يسمح بدمج الإشعارات في جلسة واحدة
  • GraphQL — بديل REST حيث استعلام واحد يحل محل عدة استعلامات

تحسين العمل مع الموقع

FusedLocationProviderClient من Google Play Services يختار مصدر الموقع الأمثل حسب الدقة المطلوبة. للمهام الخلفية استخدم أولوية PRIORITY_BALANCED_POWER_ACCURACY — هذا يعطي دقة تصل إلى 100 متر مع استهلاك ضئيل للبطارية.

في iOS، استخدم Significant Location Change بدلاً من Continuous Location. هذا يسمح بتلقي التحديثات فقط عند الحركة الكبيرة (أكثر من 500 متر)، وليس كل بضع ثوانٍ.

أدوات تحليل استهلاك الطاقة

Android Battery Historian — أداة ويب من Google لتصور بيانات BatteryStats. تدعم استيراد التفريغ، ترميز المكونات بالألوان ومقارنة الجلسات. المقاييس الرئيسية: وقت الاحتفاظ بـ WakeLock، نشاط وحدة الراديو، جلسات GPS.

Xcode Energy Organizer يجمع بيانات استهلاك الطاقة من مستخدمي الإنتاج عبر TestFlight و App Store. تحصل على تقرير عن متوسط الاستهلاك على أجهزة مختلفة وإصدارات iOS. هذا يسمح بتتبع الانحدارات بعد التحديثات.

PerfDog (Tencent) — أداة متعددة المنصات لاختبار الأداء تشمل قياسات استهلاك الطاقة. تدعم iOS و Android، وتسمح بتسجيل المقاييس بتردد 1-10 إطارات في الثانية.

الأداةالمنصةالمقاييس
Battery HistorianAndroidWakeLock، الشبكة، GPS، المعالج، الشاشة
Energy ProfilerAndroid Studioالمعالج، الشبكة، GPS، الراديو في الوقت الفعلي
Energy LogiOS (Xcode)المعالج، الشبكة، GPU، الشاشة، الموقع
PerfDogiOS + Androidالطاقة، FPS، المعالج، الذاكرة (معاً)

وفقاً لـ Apple WWDC 2023، استخدام Energy Organizer يقلل متوسط استهلاك الطاقة للتطبيقات بنسبة 15-25% من خلال تحديد وإصلاح الانحدارات قبل إصدار التحديث في App Store.

الأسئلة الشائعة

أي تطبيق يستهلك البطارية أكثر؟

الشبكات الاجتماعية وتطبيقات المراسلة (Facebook، Instagram، WhatsApp، Telegram) تقليدياً تتصدر في استهلاك الطاقة. تقوم باستمرار بمزامنة البيانات وتحديث الخلاصة وتلقي الإشعارات واستخدام GPS. في المرتبة الثانية الألعاب ذات الرسومات ثلاثية الأبعاد التي تحمّل GPU و CPU معاً، وتستهلك حتى 400-600 mA·h في الساعة من اللعب النشط.

هل يؤثر معدل تحديث الشاشة على استهلاك البطارية؟

نعم، بشكل مباشر. الشاشة — المكون الأكثر استهلاكاً للطاقة في الهاتف الذكي. زيادة التردد من 60 هرتز إلى 120 هرتز يزيد استهلاك طاقة الشاشة بنسبة 30-50%. لكن الشاشات الحديثة بتقنية LTPO تغير التردد ديناميكياً من 1 إلى 120 هرتز حسب المحتوى، مما يقلل التأثير على البطارية.

كيف يؤثر GPS على استهلاك الطاقة؟

GPS عالي الدقة يستهلك حوالي 200-300 mA·h في الساعة من التشغيل المستمر. للمقارنة، تحديد الموقع عبر Wi-Fi وأبراج الاتصالات (NETWORK_PROVIDER) يستهلك فقط 20-40 mA·h لنفس الفترة. استخدم Geofencing API لتشغيل GPS فقط عند دخول منطقة محددة.

هل يجب إغلاق التطبيقات في الخلفية يدوياً؟

لا. أنظمة التشغيل الحديثة (Android و iOS) تحسن العمليات الخلفية بنفسها. الإغلاق القسري للتطبيق وإعادة تشغيله يستهلك طاقة أكثر مما لو بقي التطبيق في الخلفية. الاستثناء — التطبيقات التي تسبب مشاكل واضحة (يتم تحديدها عبر إحصائيات البطارية في الإعدادات).

كيف أعرف أي تطبيق يستهلك البطارية على Android؟

افتح Settings > Battery > Battery Usage. سيعرض النظام قائمة بالتطبيقات مع نسبة الاستهلاك. للتحليل التفصيلي، استخدم ADB: adb shell dumpsys batterystats وحمّل التفريغ إلى Battery Historian. سيعرض هذا ليس فقط الاستهلاك الكلي ولكن أيضاً تفصيلاً حسب المكونات (WakeLock، الشبكة، GPS).

الخلاصة

  • استنزاف البطارية — استهلاك غير طبيعي للطاقة من قبل التطبيق، مما يسبب تفريغاً سريعاً للجهاز ويضعف تجربة المستخدم
  • الأسباب الرئيسية: WakeLock، طلبات الشبكة المتكررة، GPS عالي الدقة، الرسوم المتحركة غير المحسنة والخدمات الخلفية
  • WakeLock — أخطر آلية؛ حرره دائماً في كتلة try/finally أو استخدم WakeLock.acquire مع مهلة زمنية
  • WorkManager — واجهة برمجة التطبيقات القياسية للمهام الخلفية التي تراعي حالة البطارية والشبكة، موصى بها من Google
  • تجميع الطلبات يقلل استهلاك طاقة وحدة الراديو بنسبة 30-50% بتقليل عدد التحولات بين الأوضاع
  • التشخيص عبر Battery Historian و Energy Profiler و Xcode Energy Organizer إلزامي قبل كل إصدار
  • حلل استهلاك الطاقة على الأجهزة الفعلية — لا تعطي المحاكيات قراءات دقيقة للبطارية

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا