وضع المرآب

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

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

لتصحيح أخطاء "وضع المرآب":
  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 للإشارة إلى انتهاء وضع Garage Mode (تم إلغاؤه أو اكتماله):
    [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