لتوفير فترات عدم النشاط في المركبات، يحافظ وضع المرآب على النظام.
مستيقظًا بحيث تكون الوظائف في
JobScheduler
مقيَّد بـ
عدم النشاط.
ما هو "وضع المرآب"؟
يعتمد المستخدمون على النظام على الأجهزة المتصلة، مثل الهواتف، لضمان أنّ الأجهزة مستقرة ومحدثة ومحسنة. ولتحقيق هذه الحالة، يستخدم نظام Android الأساسي لتوفير غير نشِط لفترة قصيرة الوقت نافذة يمكن للتطبيقات من خلالها أداء مهام إذا لم ينفّذها التفاعل مع الجهاز. يُعتبَر الهاتف خاملاً إذا لم يلمس المستخدم. لمدة طويلة (60 دقيقة أو أكثر) وتكون الشاشة مطفأة. على عكس الهاتف، عندما لا يتم استخدام السيارة، يتم إيقاف تشغيلها، مما يعني أن السيارة ليس لديه عدم النشاط نافذة. يضمن "وضع المرآب" وقت الخمول في السيارة.
عندما يوقف المستخدم السيارة، يدخل النظام في وضع المرآب. بينما
السيارة في وضع المرآب، ويتم تشغيل النظام، ويتم إطفاء الشاشة
يتم تنفيذ المهام التي تكون في وضع عدم النشاط في قائمة انتظار JobScheduler
. لتنفيذ "وضع المرآب"، يُرجى الاطّلاع على
إرشادات تنفيذ الجهاز:
إرشادات تنفيذ الأجهزة
لتفعيل "وضع المرآب"، عند إيقاف المركبة، يتم استخدام طبقة تجريد الأجهزة (HAL) للمركبة (VHAL)
يجب أن يرسل
AP_POWER_STATE_REQ
مع الولاية SHUTDOWN_PREPARE
مع ضبط المعلمة على SHUTDOWN_ONLY
أو CAN_SLEEP
.
لكي تكون الحالة SHUTDOWN_PREPARE
سارية، يجب أن يحدد VHAL الاثنين
(الحالة والمعلمة الإضافية) للأمر AP_POWER_STATE_REQ
. يتيح ذلك للجهاز الدخول إلى "وضع المرآب"
التي ترصد المهام المجدولة في
JobScheduler
ويمنع النظام من المتابعة إما إلى التعليق أو الإيقاف حتى تنفيذ المهام
إنجاز المهام.
كيف ترتبط عمليات تنفيذ الأجهزة بإطار عمل Android؟
بالنسبة إلى "وضع المرآب"، يطلب إطار العمل رمز VHAL تمديد وقت إيقاف التشغيل. إلى أن يتم تجاوز المدة المطلوبة أو تنفيذ جميع المهام، وعندها يتم إيقاف تشغيل النظام. في ظل ظروف معيّنة محددة في ملف CDD، يمكن أن تؤدي عمليات تنفيذ الأجهزة إلى إيقاف تشغيل النظام في وقت أقرب. للحصول على التفاصيل حول متطلبات التوافق مع Android، راجع صفحة مستند تعريف التوافق (CDD)
في حال ضرورة إيقاف VHAL للنظام قبل اكتمال "وضع المرآب"، يمكن أن تُصدر VHAL مشكلة.
SHUTDOWN_PREPARE
مع ضبط المعلمة على
SHUTDOWN_IMMEDIATELY
أو SLEEP_IMMEDIATELY
. الجهاز
عمليات التنفيذ إمكانية استخدام هذا في ظروف محددة فقط، وعادةً ما
عند عدم توفر الموارد اللازمة للحفاظ على تشغيل النظام. بالنسبة
مثلاً، عندما تكون سعة البطارية غير كافية.
الشكل 1. مسار وضع المرآب
كيف يستخدم مطوّرو التطبيقات "وضع المرآب"؟
لا تتفاعل التطبيقات والخدمات مباشرةً مع "وضع المرآب". بدلاً من ذلك،
تطبيقات جدولة المهام في
JobScheduler
هذه الوظائف مقيَّدة
يتم تنفيذ الخمول أثناء وضع المرآب.
يوضّح الرمز التالي كيفية جدولة مهمة لتنفيذها أثناء "وضع المرآب":
public class MyGarageModeJob extends JobService { ... } Context context = ...; int jobId = ...; ComponentName myGarageModeJobName = new componentName(context, MyGarageModeJob.class); JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName) .setRequiresDeviceIdle(true); // Example of an optional constraint: infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED); JobScheduler jobScheduler = (JobScheduler) context .getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(infoBuilder.build());
وضع تصحيح الأخطاء في المرآب
لتصحيح أخطاء "وضع المرآب":- لتفعيل فئات التسجيل ذات الصلة بميزة "وضع المرآب":
adb shell stop adb shell setprop log.tag.GarageMode VERBOSE adb shell setprop log.tag.Finsky VERBOSE adb shell setprop log.tag.CAR.POWER VERBOSE adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE adb shell start
- لمراجعة مخرجات Logcat للإشارة إلى بدء "وضع المرآب":
GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
- لتحديد مخرجات Logcat للإشارة إلى انتهاء وضع المرآب (تم الإلغاء أو
مكتملة):
أو[GarageMode]: GarageMode was canceled
[GarageMode]: GarageMode completed normally
يعتمد "وضع المرآب" على حالة طاقة المركبة على النحو الموضَّح. أعلاه
- راجِع ناتج Logcat للإشارة إلى حالات الطاقة الصحيحة التي تم إدخالها:
CAR.POWER: starting shutdown prepare without Garage Mode GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode CAR.POWER: send shutdown prepare CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0