تحاول أجهزة Android تلقائيًا الحصول على وقت Unix الصحيح من مصدر شبكة. يستخدم 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 على الرابط
frameworks/base/core/res/res/values/config.xml
:
مفتاح الإعداد | قيمة AOSP | الوصف |
---|---|---|
config_ntpRetry |
3 |
بعد تعذُّر التحديث، يشير هذا المقياس إلى عدد المرات التي يحاول فيها النظام
الاستعلام عن وقت الشبكة باستخدام فاصل استعلام NTP أقصر (config_ntpPollingIntervalShorter )، قبل التراجع واستخدام
فاصل الاستعلام العادي (config_ntpPollingInterval ). إذا كانت القيمة
أقل من 0 ، يعني ذلك أنّ النظام يعيد محاولة الاستعلام باستخدام فاصل استعلام NTP
أقصر إلى أن يتمكّن من التحديث بنجاح. |
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.
إتاحة العمل على خوادم متعددة
بالنسبة إلى الإصدار 14 من نظام التشغيل Android والإصدارات الأحدث، يتيح إطار العمل استخدام
خوادم NTP متعددة. ويتوافق هذا مع الحالات التي يتم فيها توزيع الأجهزة على مستوى العالم من خلال إعداد واحد، ولكن يتم فيها حظر الوصول إلى خوادم مثل time.android.com
في أماكن معيّنة.
تحاول الخوارزمية كل خادم محدّد في config_ntpServers
مفتاح الضبط. وعندما يعثر على خادم يستجيب، يواصل النظام استخدام
هذا الخادم إلى أن يتعذّر عليه إعادة التحديث أو تتم إعادة تشغيل الجهاز.
الدقة
إنّ ميزة المزامنة التلقائية لوقت الشبكة في Android تستخدم بروتوكول SNTP من خلال طلب بحث لمرة واحدة تقريبًا مرة واحدة في اليوم، وذلك لمحاولة التأكد من توفُّر إشارة زمنية حديثة دائمًا.
إنّ تأثيرات وقت استجابة الشبكة هي أكبر مساهم في عدم دقة الوقت عند استخدام بروتوكول SNTP في نظام التشغيل Android. يفترض بروتوكول SNTP تأخُّرًا متماثلًا في الشبكة، أي أنّ وقت استجابة الشبكة للطلب هو نفسه وقت استجابة الشبكة للردّ، وأنّ الوقت الصحيح يقع في منتصف مسار الشبكة ذهاباً وإيابًا. غالبًا ما تكون مدة الذهاب والعودة للشبكة من مرتبة بضع مئات المللي ثانية، وفي الشبكة السلكية تكون مدة الاستجابة قريبة من التناظر، ما يؤدي إلى مستويات من عدم الدقة يكاد المستخدمون لا يلاحظونها. ومع ذلك، في مجال الهاتف الجوّال أو الهاتف اللاسلكي، هناك عدة مراحل يمكن فيها إدراج تأخيرات غير متكافئة وطويلة نسبيًا في معاملة الشبكة، ما يؤدي إلى زيادة عدم الدقة.
عند ضبط الإعداد التلقائي لنظام التشغيل AOSP لـ config_ntpTimeout
على 5000
ملي ثانية،
وإذا كان كل وقت استجابة الشبكة مركّزًا فقط على مرحلتي الإرسال أو الاستقبال،
سيكون الحد الأقصى للخطأ النظري 2.5 ثانية تقريبًا.
تتأثر دقة ساعة النظام بشكل عام أيضًا بقدرة جهاز Android
على تتبُّع الوقت المنقضي بدقة بعد الحصول على إشارة زمنية. يرتبط هذا الإجراء
بجميع ميزات ضبط الوقت على Android، وليس فقط بميزة رصد وقت الشبكة، ولذلك تغضّب خدمة time_detector
النظر عن اقتراحات الوقت القديمة. يتم تعديل محتوى
خدمة network_time_update_service
بانتظام باستخدام الفاصل الزمني
config_ntpPollingInterval
لتوفير اقتراحات جديدة بشأن الوقت في خدمة time_detector
وضمان عدم الرجوع إلى مصادر وقت ذات أولوية أقل ودقة أقل في بعض الأحيان أو
غير صحيحة في بعض الأحيان، مثل telephony
.time_detector
عند استخدام ميزة "رصد الوقت تلقائيًا"، يمكن أن تتأثر دقة ساعة نظام الجهاز
بإعدادات أخرى لخدمة time_detector
، مثل
الثوابت والعلامات التي تؤثّر في مدى اختلاف اقتراح الوقت عن
وقت ساعة النظام الحالي قبل ضبط الساعة
(ServiceConfigAccessorImpl.java
).
يمكن لصنّاع الأجهزة تعديل الدقة باستخدام خيارات الضبط السابقة والثوابت. من المهمّ معرفة حدود تنفيذ SNTP في المناقشة، والتأثير المحتمل على استهلاك الطاقة من عمليات الشبكة المتكرّرة، والتأثير على التطبيقات التي تعمل على الجهاز من تعديلات الساعة المتكرّرة ولكن الأصغر حجمًا، والتأثير على تحميل الخادم.
الاستخدامات الأخرى لوقت الشبكة
في حال عدم ضبط ميزة "الرصد التلقائي للوقت" باستخدام مصدر network
أو إذا
أوقف المستخدم ميزة "الرصد التلقائي للوقت"، سيظلّ الوقت الذي حصلت عليه
خدمةnetwork_time_update_service
يُستخدَم من خلال المكوّنات التالية:
- طريقة
SystemClock.currentNetworkTimeClock()
. - وظائف المنصة الداخلية على سبيل المثال، يمكن لنظام A-GPS تحديد موقع نظام تحديد المواقع العالمي (GNSS) بسرعة أكبر عندما يتوفّر لديه معلومات وقت الشبكة.
تصحيح الأخطاء والاختبار
يصف القسم التالي أوامر 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