وضع المرآب

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

لتوفير فترات من الخمول في المركبات ، يُبقي Garage Mode النظام مستيقظًا بحيث يمكن تنفيذ الوظائف في JobScheduler المقيدة بالكسل .

ما هو وضع المرآب؟

على الأجهزة المتصلة مثل الهواتف ، يعتمد المستخدمون على النظام لضمان استقرار الأجهزة وحداثتها وتحسينها. لتحقيق هذه الحالة ، توفر منصة Android نافذة زمنية خاملة يمكن خلالها للتطبيقات أداء المهام عندما لا يتفاعل المستخدم مع الجهاز. يعتبر الهاتف في وضع الخمول عندما لا يلمسه المستخدم لمدة طويلة (60 دقيقة أو أكثر) ويتم إيقاف تشغيل الشاشة. على عكس الهاتف ، عندما لا يتم استخدام السيارة ، يتم إيقاف تشغيلها ، مما يعني أن السيارة لا تحتوي على نافذة زمنية خاملة . يضمن وضع المرآب وقت الخمول في السيارة.

عندما يقوم المستخدم بإيقاف تشغيل السيارة ، يدخل النظام في وضع المرآب. عندما تكون السيارة في وضع Garage ، يتم تشغيل النظام ، ويتم إيقاف تشغيل الشاشة ، ويتم تنفيذ المهام الخاملة في قائمة انتظار JobScheduler. لتنفيذ وضع Garage ، راجع إرشادات تنفيذ الجهاز أدناه.

إرشادات تنفيذ الجهاز

لتنشيط وضع المرآب ، عند إيقاف تشغيل السيارة ، يجب على HAL (VHAL) إرسال AP_POWER_STATE_REQ بالحالة SHUTDOWN_PREPARE مع ضبط المعلمة على SHUTDOWN_ONLY أو CAN_SLEEP .

لكي تكون الحالة SHUTDOWN_PREPARE فعالة ، يجب أن تحدد VHAL المعلمتين (الحالة والمعلمة الإضافية) للأمر AP_POWER_STATE_REQ . يمكّن هذا الجهاز من الدخول في وضع Garage ، والذي يكتشف المهام المجدولة في JobScheduler ويمنع النظام من المتابعة إما للتعليق أو الإغلاق حتى تكتمل المهام.

كيف تتصل تطبيقات الجهاز بإطار عمل Android؟

بالنسبة إلى Garage Mode ، يطلب إطار العمل من VHAL تمديد وقت إيقاف التشغيل حتى يتم تجاوز المدة المطلوبة أو تنفيذ جميع المهام ، وفي ذلك الوقت سيتم إيقاف تشغيل النظام. في ظل ظروف محددة محددة في CDD ، يمكن أن تقوم تطبيقات الجهاز بإغلاق النظام في وقت أقرب. (للحصول على تفاصيل حول متطلبات توافق Android ، راجع مستند تعريف توافق Android (CDD) .) إذا كان يجب على VHAL إيقاف تشغيل النظام قبل اكتمال وضع Garage ، فيمكن لـ VHAL إصدار SHUTDOWN_PREPARE مع تعيين المعلمة على SHUTDOWN_IMMEDIATELY أو SLEEP_IMMEDIATELY . يمكن أن تستخدم تطبيقات الجهاز هذا في ظل ظروف محددة فقط ، عادةً عندما تكون الموارد اللازمة للحفاظ على تشغيل النظام غير متوفرة. على سبيل المثال ، عندما تكون سعة البطارية غير كافية.

وضع المرآب

كيف يعمل مطورو التطبيقات مع 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. لتمكين تسجيل الفئات ذات الصلة بوضع Garage:
    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 للإشارة إلى بدء تشغيل وضع Garage:
    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 (تم إلغاؤه أو اكتماله):
    [GarageMode]: GarageMode was canceled
    
    or،
    [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