تحديد مشاكل الشبكة وحلّها

يمكن أن يكون لحركة بيانات الشبكة الناتجة عن أحد التطبيقات تأثيرًا كبيرًا على عمر بطارية الجهاز. لتحسين هذه الزيارات، عليك قياسها وتحديد مصدرها. يمكن أن تأتي طلبات الشبكة مباشرةً من إجراء للمستخدِم، أو من رمز تطبيقك، أو من خادم يتواصل مع تطبيقك.

يوضح لك هذا الموضوع كيفية مراقبة حركة بيانات الشبكة وتصنيفها، ويقدم إرشادات حول تحديد المشكلات وحلها.

استخدام "أداة تحليل الشبكة" لمراقبة الطلبات

استخدِم أداة تحليل الشبكة لتتبُّع طلبات الشبكة التي يُجريها تطبيقك. يمكنك مراقبة كيفية نقل تطبيقك للبيانات ووقت نقلها وتحسين الرمز البرمجي الأساسي بشكلٍ مناسب.



الشكل 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();
    }
}

تحليل أنواع حركة بيانات الشبكة

عند الاطّلاع على عدد زيارات الشبكة التي ينشئها تطبيقك، عليك معرفة مصدر الزيارات حتى تتمكّن من تحسينها بشكلٍ مناسب. قد يكون نشاط الشبكة المتكرّر الذي يُنشئه تطبيقك مناسبًا تمامًا إذا كان يستجيب لإجراءات المستخدم، ولكنّه غير مناسب تمامًا إذا كان تطبيقك ليس في المقدّمة أو إذا كان الجهاز في جيب أو محفظة.

تحليل الزيارات التي بدأها المستخدِمون

قد يتم تجميع عدد الزيارات إلى الشبكة التي بدأها المستخدم بفعالية أثناء تنفيذ مستخدم مهام معيّنة داخل تطبيقك، أو قد يتم توزيعها بشكل غير متساوٍ عندما يطلب المستخدم معلومات إضافية يحتاج تطبيقك إلى الحصول عليها. هدفك من تحليل عدد زيارات الشبكة التي بدأها المستخدم هو البحث عن أنماط استخدام الشبكة المتكرّر بمرور الوقت ومحاولة خفض معدّل تكراره من خلال تجميع الطلبات معًا.

جدير بالذكر أنّ عدم القدرة على توقُّع طلبات المستخدمين يصعِّب تحسين هذا النوع من استخدام الشبكة في تطبيقك. بالإضافة إلى ذلك، يتوقّع المستخدمون الحصول على ردود سريعة عند استخدامهم للتطبيق بشكل نشط، لذلك قد يؤدي تأخير طلبات الكفاءة إلى حصول المستخدمين على تجارب سيئة. بشكل عام، يجب إعطاء الأولوية للاستجابة السريعة للمستخدم على استخدام الشبكة بكفاءة عندما يتفاعل مستخدم مع تطبيقك مباشرةً.

للحصول على اقتراحات لتحسين عدد الزيارات التي يبدأها المستخدم، يُرجى الاطّلاع على تحسين الطلبات التي يبدأها المستخدم.

تحليل الزيارات التي تبدأ من التطبيق

عادةً ما تكون حركة بيانات الشبكة التي يبدأها التطبيق منطقة يمكن أن يكون لك فيها تأثير كبير على الاستخدام الفعال لمعدل نقل بيانات الشبكة. عند تحليل نشاط تطبيقك على الشبكة، ابحث عن فترات عدم النشاط وحدِّد ما إذا كان يمكن زيادتها. فإذا لاحظت أنماطًا ثابتة للدخول إلى الشبكة من تطبيقك، فحاول تجميع حركة البيانات هذه للسماح للراديو للجهاز بالعودة إلى وضع الطاقة المنخفضة بين فترات النشاط.

للحصول على اقتراحات لتحسين الزيارات التي تبدأ من التطبيق، اطّلِع على مقالة تحسين requests التي تبدأ من التطبيق.

تحليل الزيارات التي بدأها الخادم

وعادةً ما يكون نشاط الشبكة الذي تبدأه الخوادم التي تتواصل مع تطبيقك مجالاً يمكن أن يكون له تأثير كبير في الاستخدام الفعّال لمعدل نقل بيانات الشبكة. خدمة المراسلة عبر السحابة الإلكترونية من Firebase (FCM) هي أسلوب خفيف الوزن يُستخدَم لنقل البيانات من خادم إلى مثيل تطبيق معيّن. باستخدام "المراسلة عبر السحابة الإلكترونية من Firebase"، يمكن لخادمك إرسال إشعار إلى تطبيقك الذي يعمل على جهاز معيّن يفيد بأنّه تتوفّر بيانات جديدة له.

للحصول على اقتراحات لتحسين الزيارات التي يبدأها الخادم، اطّلِع على مقالة تحسين requests التي يبدأها الخادم.

استخدام ميزة "Bar Historian" لعرض تأثيرات حركة بيانات الشبكة

Battery Historian هي أداة تعرض استهلاك بطارية الجهاز على شكل رسوم بيانية على مدار فترة زمنية. يمكنك استخدام هذه الأداة لتحليل مدى تأثير نشاطك على الشبكة في استهلاك البطارية. على سبيل المثال، يمكن أن يُظهر لك Battery Historian ما إذا كان تطبيقك يستخدم شبكة الجوّال بوتيرة أكبر مما تتوقّع. لمزيد من المعلومات حول استخدام Battery Historian، راجِع مقالة التعرّف على استخدام البطارية في الملف الشخصي باستخدام Batterystats وBattery Historian.