يمكن أن يكون لحركة بيانات الشبكة التي ينشئها أحد التطبيقات تأثير كبير في عمر بطارية الجهاز. لتحسين هذه الحركة، عليك قياس الأثر وتحديد مصدرها. يمكن أن تأتي طلبات الشبكة مباشرةً من إجراء يتخذه المستخدم أو من رمز تطبيقك أو من خادم يتواصل مع تطبيقك.
يوضّح لك هذا الموضوع كيفية مراقبة حركة بيانات الشبكة وتصنيفها، ويقدّم إرشادات حول تحديد المشاكل وحلّها.
استخدام "محلّل أداء الشبكة" لمراقبة الطلبات
استخدِم محلّل الشبكة لتتبُّع طلبات الشبكة لتطبيقك. يمكنك مراقبة طريقة نقل تطبيقك للبيانات ووقت نقلها، وتحسين الرمز الأساسي بشكل مناسب.
الشكل 1. تتبُّع حركة بيانات الشبكة يشير نمط حركة بيانات الشبكة إلى أنّه يمكن تحسين الكفاءة بشكل كبير من خلال جلب الطلبات مسبقًا أو تجميع عمليات التحميل.
من خلال مراقبة وتيرة عمليات نقل البيانات وكمية البيانات المنقولة خلال كل عملية اتصال، يمكنك تحديد أجزاء تطبيقك التي يمكن أن تكون أكثر كفاءة في استخدام البطارية. بوجهٍ عام، ستبحث عن ارتفاعات قصيرة يمكن تأخيرها.
لتحديد سبب ارتفاعات عمليات النقل بشكل أفضل، تتيح لك Traffic Stats API وضع علامة على عمليات نقل البيانات التي تحدث من مقبس ضمن سلسلة محادثات معيّنة باستخدام TrafficStats.setThreadStatsTag().
لا يؤدي استدعاء هذه الدالة إلى وضع علامة تلقائيًا على كل حركة البيانات لسلسلة محادثات معيّنة، بل يجب تطبيق العلامات على المقابس.
بعد ضبط علامة سلسلة المحادثات، يمكنك وضع علامة على المقابس الفردية وإزالة العلامة عنها يدويًا
باستخدام
TrafficStats.tagSocket()
و
TrafficStats.untagSocket().
يتم أيضًا تطبيق علامة إذا تم فتح مقبس على سلسلة المحادثات، أو إذا قبل مقبس خادم اتصالاً.
سيستخدم الوصول المتزامن إلى المقبس نفسه من خلال سلاسل التعليمات المتعددة أي علامة كانت على المقبس عند إرسال حِزم الشبكة أو استلامها (قد يختلف ذلك عن الوقت الذي كتب فيه المستخدم البيانات أو قرأها، بسبب التخزين المؤقت وعمليات إعادة الإرسال).
على سبيل المثال، يمكنك تحديد ثوابت لتمثيل أنواع مختلفة من حركة بيانات الشبكة، كما هو موضّح في عينة التعليمات البرمجية التالية:
Kotlin
const val USER_INITIATED = 0x1000 const val APP_INITIATED = 0x2000 const val SERVER_INITIATED = 0x3000
Java
public static final int USER_INITIATED = 0x1000; public static final int APP_INITIATED = 0x2000; public static final int SERVER_INITIATED = 0x3000;
يمكنك بعد ذلك وضع علامة على طلبات الشبكة وفقًا لذلك:
Kotlin
TrafficStats.setThreadStatsTag(USER_INITIATED) TrafficStats.tagSocket(outputSocket) // Transfer data using socket TrafficStats.untagSocket(outputSocket)
Java
TrafficStats.setThreadStatsTag(USER_INITIATED); TrafficStats.tagSocket(outputSocket); // Transfer data using socket TrafficStats.untagSocket(outputSocket);
تضع HttpURLConnection
المكتبة علامة تلقائيًا على المقابس استنادًا إلى القيمة
TrafficStats.getThreadStatsTag()
الحالية. تضع المكتبة أيضًا علامة على المقابس وتزيلها عند إعادة تدويرها من خلال مجموعات الاتصال المستمر، كما هو موضّح في عينة الرمز البرمجي التالية:
Kotlin
class IdentifyTransferSpikeTask { @WorkerThread fun request(url: String) { TrafficStats.setThreadStatsTag(APP_INITIATED) // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag() } }
Java
public class IdentifyTransferSpikeTask { @WorkerThread public void request(String url) { TrafficStats.setThreadStatsTag(APP_INITIATED); // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag(); } }
تحليل أنواع حركة بيانات الشبكة
عند الاطّلاع على حركة بيانات الشبكة التي ينشئها تطبيقك، عليك فهم مصدر حركة البيانات لتتمكّن من تحسينها بشكل مناسب. قد يكون النشاط المتكرّر للشبكة الذي ينشئه تطبيقك مناسبًا تمامًا إذا كان يستجيب لإجراءات المستخدم، ولكنّه غير مناسب على الإطلاق إذا لم يكن تطبيقك في المقدّمة أو إذا كان الجهاز في جيب أو حقيبة.
تحليل حركة بيانات الشبكة التي يبدأها المستخدم
يمكن تجميع حركة بيانات الشبكة التي يبدأها المستخدم بكفاءة أثناء تنفيذ المستخدم مهمة معيّنة داخل تطبيقك، أو يمكن توزيعها بشكل غير متساوٍ عندما يطلب المستخدم معلومات إضافية يحتاج تطبيقك إلى الحصول عليها. هدفك من تحليل حركة بيانات الشبكة التي يبدأها المستخدم هو البحث عن أنماط الاستخدام المتكرّر للشبكة بمرور الوقت ومحاولة تقليل وتيرتها من خلال تجميع الطلبات معًا.
إنّ عدم القدرة على توقُّع طلبات المستخدمين يجعل من الصعب تحسين هذا النوع من استخدام الشبكة في تطبيقك. بالإضافة إلى ذلك، يتوقّع المستخدمون استجابات سريعة عند استخدامهم تطبيقًا بشكل نشط، لذا يمكن أن يؤدي تأخير الطلبات لتحسين الكفاءة إلى تجارب سيئة للمستخدمين. بوجهٍ عام، يجب أن تكون الأولوية للاستجابة السريعة للمستخدم على الاستخدام الفعال للشبكة أثناء تفاعل المستخدم مباشرةً مع تطبيقك.
للاطّلاع على اقتراحات لتحسين حركة بيانات الشبكة التي يبدأها المستخدم، يُرجى مراجعة مقالة تحسين الطلبات التي يبدأها المستخدم.
تحليل حركة بيانات الشبكة التي يبدأها التطبيق
عادةً ما تكون حركة بيانات الشبكة التي يبدأها التطبيق مجالاً يمكنك فيه إحداث تأثير كبير في الاستخدام الفعال لنطاق الشبكة الترددي. عند تحليل نشاط الشبكة لتطبيقك، ابحث عن فترات عدم النشاط وحدِّد ما إذا كان يمكن زيادتها. إذا ظهرت لك أنماط وصول متسقة إلى الشبكة من تطبيقك، حاوِل تجميع حركة البيانات هذه للسماح لجهاز الراديو بالعودة إلى وضع توفير الطاقة بين فترات النشاط.
للاطّلاع على اقتراحات لتحسين حركة بيانات الشبكة التي يبدأها التطبيق، يُرجى مراجعة مقالة تحسين الطلبات التي يبدأها التطبيق.
تحليل حركة بيانات الشبكة التي يبدأها الخادم
إنّ نشاط الشبكة الذي تبدأه الخوادم التي تتواصل مع تطبيقك هو أيضًا عادةً مجال يمكنك فيه إحداث تأثير كبير في الاستخدام الفعال لنطاق الشبكة الترددي. مراسلة Firebase السحابية (FCM) هي آلية بسيطة تُستخدم لنقل البيانات من خادم إلى مثيل تطبيق معيّن. باستخدام FCM، يمكن لخادمك إشعار تطبيقك الذي يتم تشغيله على جهاز معيّن بأنّ هناك بيانات جديدة متاحة له.
للاطّلاع على اقتراحات لتحسين حركة بيانات الشبكة التي يبدأها الخادم، يُرجى مراجعة مقالة تحسين الطلبات التي يبدأها الخادم.
استخدام Battery Historian لتصوُّر تأثيرات حركة بيانات الشبكة
Battery Historian هي أداة تصوّر استهلاك بطارية الجهاز على مدى فترة زمنية معيّنة. يمكنك استخدام هذه الأداة لتحليل كيفية تأثير نشاط الشبكة في استهلاك البطارية. على سبيل المثال، يمكن أن يعرض لك Battery Historian ما إذا كان تطبيقك يستخدم جهاز الراديو للشبكة الخلوية بوتيرة أكبر من المتوقّع. لمزيد من المعلومات حول استخدام Battery Historian، يُرجى الاطّلاع على مقالة تحليل استخدام البطارية باستخدام Batterystats وBattery Historian.