وضع المرآب

لتوفير فترات من الوقت الضائع في المركبات، ووضع المرآب تحافظ على نظام مستيقظا حتى أن الوظائف في JobScheduler مقيدة مع الكسل يمكن تنفيذها.

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

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

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

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

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

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

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

بالنسبة إلى Garage Mode ، يطلب إطار العمل من VHAL تمديد وقت إيقاف التشغيل حتى يتم تجاوز المدة المطلوبة أو تنفيذ جميع المهام ، وفي ذلك الوقت سيتم إيقاف تشغيل النظام. في ظل ظروف محددة محددة في CDD ، يمكن أن تغلق تطبيقات الجهاز النظام عاجلاً. (لمزيد من التفاصيل حول متطلبات التوافق الروبوت، راجع الروبوت وثيقة تعريف التوافق (CDD) .) إذا كان VHAL يجب إيقاف النظام قبل اكتمال وضع كراج، يمكن لل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. لتمكين تسجيل فئات ذات الصلة لوضع المرآب:
    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