اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release بدلاً من aosp-main لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
لتوفير فترات وقت الاستراحة في المركبات، يحافظ وضع المرآب على تنشيط النظام
حتى يمكن تنفيذ المهام في
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.
يتم تنفيذ هذه المهام المقيّدة
بحالة عدم النشاط أثناء "وضع الصيانة".
يوضّح الرمز البرمجي التالي كيفية جدولة مهمة لتشغيلها أثناء "وضع المرآب":
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Garage Mode\n\nTo provide periods of idle time in vehicles, *Garage Mode* keeps the system\nawake so that jobs in\n[`JobScheduler`](https://developer.android.com/reference/android/app/job/JobScheduler) constrained with\n[idleness](https://developer.android.com/reference/android/app/job/JobInfo.Builder#setRequiresDeviceIdle(boolean)) can be executed.\n\nWhat is Garage Mode?\n--------------------\n\n\nOn connected devices such as phones, users rely on the system to ensure devices\nare stable, up-to-date, and optimized. To achieve that state, the Android platform\nprovides an\n[idle\ntime](https://developer.android.com/reference/android/app/job/JobInfo.Builder#setRequiresDeviceIdle(boolean))\nwindow during which apps can perform tasks when the user doesn't\ninteract with the device. A phone is considered to be *idle* when the user doesn't touch\nit for an extended duration (60 minutes or more) and the screen is turned off.\nUnlike a phone, when a car isn't being used, it's turned off, which means the car\nhas no\n[idle time](https://developer.android.com/reference/android/app/job/JobInfo.Builder#setRequiresDeviceIdle(boolean))\nwindow. Garage Mode ensures idle time in a car.\n\n\nWhen a car is turned off by the user, the system enters Garage Mode. While a\ncar is in Garage Mode, the system is powered on, the display is turned off, and\nidle jobs in the `JobScheduler` queue are executed. To implement Garage Mode, see\n[Device implementation guidelines](/docs/automotive/power/garage_mode#device).\n\nDevice implementation guidelines\n--------------------------------\n\n\nTo activate Garage Mode, when turning off the vehicle, the Vehicle HAL (VHAL)\nmust send\n[AP_POWER_STATE_REQ](https://developer.android.com/reference/android/car/VehiclePropertyIds.html#AP_POWER_STATE_REQ) with the state `SHUTDOWN_PREPARE`\nwith the parameter set to `SHUTDOWN_ONLY` or `CAN_SLEEP`.\n\n\nFor the state `SHUTDOWN_PREPARE` to be effective, the VHAL must specify the two\nparameters (state and the additional parameter) for the [AP_POWER_STATE_REQ](https://developer.android.com/reference/android/car/VehiclePropertyIds.html#AP_POWER_STATE_REQ) command. This enables the device to enter Garage Mode,\nwhich detects scheduled jobs in\n[`JobScheduler`](https://developer.android.com/reference/android/app/job/JobScheduler)\nand prevents the system from proceeding to either suspend or shut down until the jobs\nare completed.\n\nHow do device implementations connect to the Android framework?\n---------------------------------------------------------------\n\n\nFor Garage Mode, the framework requests the VHAL to extend the shutdown time\nuntil either the required duration is exceeded or all jobs have been executed,\nat which time the system shuts down. Under specific circumstances defined\nin the CDD, device implementations can shut down the system sooner. For details\non Android compatibility requirements, see the Android\n[Compatibility Definition Document (CDD)](/docs/compatibility/cdd).\n\nIf the VHAL must shut down the system before Garage Mode completes, the VHAL can issue\n`SHUTDOWN_PREPARE` with the parameter set to\n`SHUTDOWN_IMMEDIATELY` or `SLEEP_IMMEDIATELY`. Device\nimplementations can use this under specific circumstances *only*, typically\nwhen the resources needed to keep the system running are unavailable. For\nexample, when battery capacity is insufficient.\n\n**Figure 1.** Garage Mode flow\n\nHow do app developers work with Garage Mode?\n--------------------------------------------\n\n\nApps and services don't interact directly with Garage Mode. Instead,\napps schedule jobs in\n[`JobScheduler`](https://developer.android.com/reference/android/app/job/JobScheduler).\nThose jobs constrained by\n[idleness](https://developer.android.com/reference/android/app/job/JobInfo.Builder#setRequiresDeviceIdle(boolean)) are executed during Garage Mode.\n\nThe following code shows how to schedule a job to run during Garage Mode: \n\n```gdscript\npublic class MyGarageModeJob extends JobService { ... }\n\nContext context = ...;\nint jobId = ...;\n\nComponentName myGarageModeJobName = new componentName(context,\n MyGarageModeJob.class);\n\nJobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName)\n .setRequiresDeviceIdle(true);\n\n// Example of an optional constraint:\ninfoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED);\n\nJobScheduler jobScheduler = (JobScheduler) context\n .getSystemService(Context.JOB_SCHEDULER_SERVICE);\n\njobScheduler.schedule(infoBuilder.build());\n```\n\nDebug Garage Mode\n-----------------\n\nTo debug Garage Mode:\n\n1. To enable logging categories relevant to Garage Mode: \n\n ```\n adb shell stop\n adb shell setprop log.tag.GarageMode VERBOSE\n adb shell setprop log.tag.Finsky VERBOSE\n adb shell setprop log.tag.CAR.POWER VERBOSE\n adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE\n adb shell start\n ```\n | Stopping and starting Android services ensures log availability from service boot.\n2. To review the logcat output to indicate that Garage Mode is starting: \n\n ```transact-sql\n GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE\n GarageMode: [GarageMode]: Entering GarageMode\n GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON\n ```\n3. To determine that logcat output to indicate Garage Mode is finished (canceled or completed): \n\n ```transact-sql\n [GarageMode]: GarageMode was canceled\n ```\n *or* \n\n ```transact-sql\n [GarageMode]: GarageMode completed normally\n ```\n\n Garage Mode depends on the power state of the vehicle as described\n [above.](#how-do-device-implementations-connect-to-the-android-framework)\n4. Review the logcat output to indicate the correct power states are entered: \n\n ```transact-sql\n CAR.POWER: starting shutdown prepare without Garage Mode\n GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE\n GarageMode: [GarageMode]: Entering GarageMode\n CAR.POWER: send shutdown prepare\n CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0\n ```"]]