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

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

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

استخدام محلّل الشبكة لمراقبة الطلبات

استخدِم Network Profiler (محلل الشبكة) لتتبُّع طلبات الشبكة لتطبيقك. يمكنك مراقبة كيفية نقل تطبيقك للبيانات ووقته وتحسين الكود الأساسي بشكل مناسب.



الشكل 1. تتبُّع حركة بيانات الشبكة يشير نمط حركة بيانات الشبكة إلى أنه يمكن تحسين الكفاءة بشكل كبير من خلال الجلب المسبق للطلبات أو تجميع التحميلات.

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

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

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

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

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