وضع المرآب

لتوفير فترات عدم النشاط في المركبات، يحافظ وضع المرآب على النظام. مستيقظًا بحيث تكون الوظائف في 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());

وضع تصحيح الأخطاء في المرآب

لتصحيح أخطاء "وضع المرآب":
  1. لتفعيل فئات التسجيل ذات الصلة بميزة "وضع المرآب":
    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
    
  2. لمراجعة مخرجات 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
    
  3. لتحديد مخرجات Logcat للإشارة إلى انتهاء وضع المرآب (تم الإلغاء أو مكتملة):
    [GarageMode]: GarageMode was canceled
    
    أو
    [GarageMode]: GarageMode completed normally
    

    يعتمد "وضع المرآب" على حالة طاقة المركبة على النحو الموضَّح. أعلاه

  4. راجِع ناتج 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