لتوفير فترات وقت الاستراحة في المركبات، يحافظ وضع المرآب على تنشيط النظام
حتى يمكن تنفيذ المهام في
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) في Android.
إذا كان على وحدة التحكّم في حدود السرعة (VHAL) إيقاف تشغيل النظام قبل اكتمال "وضع المرآب"، يمكن لوحدة التحكّم في حدود السرعة (VHAL) إصدار الرسالة
SHUTDOWN_PREPARE
مع ضبط المَعلمة على
SHUTDOWN_IMMEDIATELY
أو SLEEP_IMMEDIATELY
. يمكن لعمليات تنفيذ التطبيقات على الأجهزة استخدام هذا الإجراء في ظروف معيّنة فقط، عادةً
عندما لا تتوفّر الموارد اللازمة للحفاظ على تشغيل النظام. على سبيل المثال، عندما تكون سعة البطارية غير كافية
الشكل 1: مسار Garage Mode
كيف يعمل مطوّرو التطبيقات مع "وضع المخترِع"؟
لا تتفاعل التطبيقات والخدمات مباشرةً مع وضع "المرآب". بدلاً من ذلك،
تجدول التطبيقات المهام في
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 للإشارة إلى انتهاء وضع Garage Mode (تم إلغاؤه أو
اكتماله):
أو[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