يمكن أن تؤثر حركة بيانات الشبكة التي ينشئها التطبيق بشكل كبير في عمر بطارية الجهاز. لتحسين هذه الزيارات، عليك قياسها وتحديد مصدرها. يمكن أن تأتي طلبات الشبكة مباشرةً من إجراء يتّخذه المستخدم أو من رمز تطبيقك أو من خادم يتواصل مع تطبيقك.
يوضّح لك هذا الموضوع كيفية مراقبة حركة بيانات الشبكة وتصنيفها، ويقدّم إرشادات حول تحديد المشاكل وحلّها.
استخدام "محلّل الشبكة" لمراقبة الطلبات
استخدِم محلّل الشبكة لتتبُّع طلبات الشبكة في تطبيقك. يمكنك مراقبة كيفية نقل تطبيقك للبيانات ووقت نقلها وتحسين الرمز الأساسي بشكل مناسب.
الشكل 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() الحالية. تضع المكتبة أيضًا علامات على المقابس وتزيلها عند إعادة تدويرها من خلال مجموعات keep-alive كما هو موضّح في عينة التعليمات البرمجية التالية:
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.