تحاول أجهزة Android تلقائيًا الحصول على وقت حقبة يونكس الصحيح من مصدر شبكة. يستخدم نظام التشغيل Android بروتوكول وقت الشبكة البسيط (SNTP)، الذي يستخدم بروتوكول مخطط بيانات المستخدم (UDP)، للحصول على معلومات الوقت.
المكوّنات الموضّحة في هذه الصفحة هي جزء من نظام الرصد التلقائي للوقت، ويُشار إليه باسم مصدر الوقت على الشبكة. يمكن استخدام إشارة وقت من خادم وقت على الشبكة لضبط ساعة نظام جهاز Android عندما يكون رصد الوقت التلقائي متاحًا على الجهاز وتم ضبط خدمة time_detector
لاستخدامها.
يستخدم نظام التشغيل Android تلقائيًا مصدر وقت الشبكة كمصدر أساسي للرصد التلقائي للوقت.
نظام رصد وقت الشبكة
تنفّذ خدمة network_time_update_service
التي تعمل في خادم نظام Android نظام رصد الوقت على الشبكة. تستخدم الخدمة بروتوكول SNTP بشكل دوري للحصول على إشارة وقت من خادم. تراقب الخدمة أيضًا اتصال الشبكة وتؤدي إلى إعادة تحميل الوقت عندما لا يتوفّر أي إشارة وقت حديثة بعد فترات طويلة من ضعف الاتصال.
تحاول خدمة network_time_update_service
الحصول على إشارة الوقت بعد
بدء التشغيل وعند إنشاء اتصال بالشبكة لأول مرة. بعد ذلك، تحاول الخدمة الحفاظ على أحدث إشارة لديها. ويوازن بين احتياجات أجهزة Android الفردية والحِمل الكبير الذي يمكن أن ينتج عن العديد من أجهزة Android في جميع أنحاء العالم التي تعيد ضبط الوقت.
ترسل خدمة network_time_update_service
اقتراحات بشأن وقت الشبكة إلى خدمة time_detector
باستخدام واجهات برمجة التطبيقات الداخلية. تستخدم بعد ذلك مكوّنات أخرى في منصة Android اقتراحات الوقت هذه.
بعد تلقّي اقتراحات من مصدر وقت الشبكة، تحدّد خدمة time_detector
ما إذا كان سيتم تعديل ساعة النظام وفقًا لقواعد تحديد الأولوية التي تم ضبطها.
لضبط نظام الرصد التلقائي للوقت لاستخدام اقتراحات مصدر الشبكة من أجل ضبط ساعة النظام تلقائيًا، استخدِم core/res/res/values/config.xml
ملف إعداد خادم النظام. تأكَّد من أنّ القيمة network
مضمّنة في config_autoTimeSourcesPriority
في الموضع المطلوب. لمزيد من المعلومات، يُرجى الاطّلاع على أولوية مصدر الوقت.
إعداد الجهاز
يوضّح هذا القسم كيف يمكن لمصنّعي الأجهزة ضبط نظام رصد الوقت على الشبكة.
تتوفّر إعدادات AOSP الأساسية في الملف config.xml
:
frameworks/base/core/res/res/values/config.xml
:
مفتاح الإعداد | قيمة AOSP | الوصف |
---|---|---|
config_ntpRetry |
3 |
بعد تعذُّر إعادة التحميل، يمثّل هذا الرقم عدد المرات التي يحاول فيها النظام إجراء استطلاع لوقت الشبكة باستخدام فاصل زمني أقصر للاستطلاع في بروتوكول وقت الشبكة (config_ntpPollingIntervalShorter )، وذلك قبل التراجع واستخدام الفاصل الزمني العادي للاستطلاع (config_ntpPollingInterval ). تعني القيمة الأقل من 0 أنّ النظام يعيد محاولة الاستطلاع باستخدام فاصل زمني أقصر للاستطلاع في بروتوكول وقت الشبكة إلى أن يتمكّن من إعادة التحميل بنجاح. |
config_ntpPollingInterval |
64800000 (18 ساعة) |
الفاصل الزمني العادي للاستطلاع عن وقت الشبكة بالمللي ثانية. |
config_ntpPollingIntervalShorter |
60000 (دقيقة واحدة) |
الفاصل الزمني لطلب البيانات من الشبكة عند إعادة المحاولة، بالمللي ثانية. يتم استخدامها عند تعذُّر إعادة تحميل الوقت. |
config_ntpServers |
إدخال واحد: ntp://time.android.com |
خوادم NTP التي سيتم استخدامها للحصول على وقت دقيق يجب أن تكون العناصر بالتنسيق التالي:
ntp://<host>[:port] .
هذا ليس نظام معرّف موارد منتظم (URI) مسجّلاً لدى هيئة IANA. |
config_ntpTimeout |
5000 | الوقت الذي يجب انتظاره للحصول على استجابة من خادم NTP بالمللي ثانية قبل انتهاء المهلة |
خوادم
تستخدم AOSP تلقائيًا خوادم الوقت على time.android.com
، وهو اسم مستعار
لخدمة Google Public NTP. لا تتضمّن هذه الخدمة اتفاقية مستوى الخدمة. لمزيد من المعلومات، يُرجى الاطّلاع على الأسئلة الشائعة حول خدمة Google Public NTP.
إتاحة استخدام خوادم متعددة
في نظام التشغيل Android 14 والإصدارات الأحدث، يتيح إطار العمل استخدام عدّة خوادم NTP. ويتيح ذلك حالات يتم فيها توزيع الأجهزة على مستوى العالم باستخدام إعداد واحد، ولكن يتم فيها حظر الوصول إلى الخوادم، مثل time.android.com
، في أماكن معيّنة.
تحاول الخوارزمية الوصول إلى كل خادم محدّد في مفتاح الإعداد config_ntpServers
. عندما تعثر الخوارزمية على خادم يستجيب، يواصل النظام استخدام هذا الخادم إلى أن يتعذّر إعادة تحميله أو تتم إعادة تشغيل الجهاز.
الدقة
تستخدم ميزة المزامنة التلقائية لوقت الشبكة في Android بروتوكول SNTP مع طلب واحد للوقت مرة واحدة في اليوم تقريبًا، وذلك لضمان توفّر إشارة وقت حديثة دائمًا.
تُعدّ تأثيرات تأخُّر الشبكة من العوامل المهمة التي تؤدي إلى عدم دقة الوقت في تنفيذ بروتوكول SNTP على Android. يفترض بروتوكول SNTP أنّ تأخيرات الشبكة متماثلة، أي أنّ وقت استجابة الشبكة للطلب هو نفسه وقت استجابة الشبكة للرد، وأنّ الوقت الصحيح يقع في منتصف رحلة الشبكة ذهابًا وإيابًا. في كثير من الأحيان، يكون وقت نقل البيانات ذهابًا وإيابًا على الشبكة في حدود بضع مئات من الملّي ثانية، ويكون التأخّر في الاستجابة على الشبكة السلكية متماثلاً تقريبًا، ما يؤدي إلى مستويات من عدم الدقة لا يمكن للمستخدمين ملاحظتها تقريبًا. ومع ذلك، في الاتصالات الهاتفية عبر شبكة الجوّال أو الراديو، هناك عدة مراحل يمكن فيها إدراج تأخيرات طويلة نسبيًا وغير متماثلة في عملية الشبكة، ما يؤدي إلى زيادة عدم الدقة.
مع ضبط الإعداد التلقائي config_ntpTimeout
في AOSP على 5000
مللي ثانية، وفي حال تركيز كل وقت استجابة الشبكة على جزء
الاستقبال أو الإرسال فقط، يكون الحد الأقصى للخطأ النظري حوالي 2.5 ثانية.
تتأثر دقة ساعة النظام الإجمالية أيضًا بقدرة جهاز Android على تتبُّع الوقت المنقضي بدقة بعد الحصول على إشارة الوقت. هذه مشكلة تواجه جميع عمليات ضبط الوقت على Android، وليس فقط رصد وقت الشبكة، ولهذا السبب تتجاهل خدمة time_detector
اقتراحات الوقت القديمة. تعيد الخدمة تحميل البيانات بانتظام باستخدام الفاصل الزمني config_ntpPollingInterval
للحفاظ على تزويد خدمة time_detector
باقتراحات جديدة بشأن الوقت ولضمان عدم رجوع خدمة time_detector
إلى مصادر وقت أقل أهمية وغالبًا ما تكون أقل دقة أو غير صحيحة أحيانًا، مثل telephony
.network_time_update_service
عند استخدام ميزة "الرصد التلقائي للوقت"، يمكن أن تتأثر دقة ساعة نظام الجهاز بإعدادات أخرى لخدمة time_detector
، مثل الثوابت والعلامات التي تحدد مقدار الاختلاف بين اقتراح الوقت ووقت ساعة النظام الحالي قبل تعديل الساعة (ServiceConfigAccessorImpl.java
).
يمكن لمصنّعي الأجهزة تعديل الدقة باستخدام خيارات الضبط والثوابت السابقة. ومع ذلك، من المهم معرفة القيود المفروضة على تنفيذ SNTP في النظام الأساسي والتأثير المحتمل في استهلاك الطاقة الناتج عن عمليات الشبكة المتكررة، والتأثير في التطبيقات التي تعمل على الجهاز بسبب عمليات ضبط الساعة المتكررة ولكن الأصغر، والتأثير في حمل الخادم.
استخدامات أخرى لوقت الشبكة
إذا لم يتم ضبط ميزة "الرصد التلقائي للوقت" باستخدام مصدر network
أو إذا أوقف المستخدم ميزة "الرصد التلقائي للوقت"، سيظل يتم استخدام الوقت الذي تقدّمه خدمة network_time_update_service
من خلال المكوّنات التالية:
- الطريقة
SystemClock.currentNetworkTimeClock()
- وظائف المنصة الداخلية على سبيل المثال، يمكن لنظام A-GPS تحديد الموقع الجغرافي بشكل أسرع عند توفّر معلومات الوقت من الشبكة.
تصحيح الأخطاء والاختبار
يوضّح القسم التالي أوامر shell لتصحيح الأخطاء واختبار ميزة رصد الوقت على الشبكة.
التفاعل مع خدمة network_time_update_service
لعرض الحالة الحالية لـ network_time_update_service
، استخدِم الأمر التالي:
adb shell cmd network_time_update_service dump
للاطّلاع على مجموعة من خيارات سطر الأوامر التي يمكن أن تساعد في الاختبار، استخدِم:
adb shell cmd network_time_update_service help