برای ارائه دورههای بیکاری در وسایل نقلیه، Garage Mode سیستم را بیدار نگه میدارد تا کارهایی که در JobScheduler
با بیکاری محدود شدهاند، اجرا شوند.
حالت گاراژ چیست؟
در دستگاههای متصل مانند تلفنها، کاربران برای اطمینان از پایداری، بهروز بودن و بهینه بودن دستگاهها به سیستم تکیه میکنند. برای دستیابی به این حالت، پلتفرم اندروید یک پنجره زمان بیکار را فراهم می کند که در طی آن برنامه ها می توانند وظایف خود را در زمانی که کاربر با دستگاه تعامل ندارد انجام دهند. هنگامی که کاربر برای مدت طولانی (60 دقیقه یا بیشتر) آن را لمس نمی کند و صفحه خاموش می شود، یک تلفن بیکار در نظر گرفته می شود. برخلاف تلفن، وقتی از خودرو استفاده نمیشود، خاموش میشود، به این معنی که خودرو پنجره زمان بیکاری ندارد. حالت گاراژ زمان بیکاری در خودرو را تضمین می کند.
هنگامی که یک خودرو توسط کاربر خاموش می شود، سیستم وارد حالت گاراژ می شود. هنگامی که یک خودرو در حالت گاراژ است، سیستم روشن می شود، صفحه نمایش خاموش می شود و کارهای بیکار در صف JobScheduler
اجرا می شوند. برای پیادهسازی حالت گاراژ، دستورالعملهای اجرای دستگاه را ببینید.
دستورالعمل های پیاده سازی دستگاه
برای فعال کردن حالت گاراژ، هنگام خاموش کردن خودرو، خودرو HAL (VHAL) باید AP_POWER_STATE_REQ
با وضعیت SHUTDOWN_PREPARE
با پارامتر تنظیم شده روی SHUTDOWN_ONLY
یا CAN_SLEEP
ارسال کند.
برای اینکه حالت SHUTDOWN_PREPARE
موثر باشد، VHAL باید دو پارامتر (وضعیت و پارامتر اضافی) را برای دستور AP_POWER_STATE_REQ
مشخص کند. این دستگاه را قادر میسازد تا وارد حالت گاراژ شود، که کارهای برنامهریزیشده را در JobScheduler
شناسایی میکند و از تعلیق یا خاموش شدن سیستم تا تکمیل کارها جلوگیری میکند.
پیاده سازی های دستگاه چگونه به فریم ورک اندروید متصل می شوند؟
برای Garage Mode، فریم ورک از VHAL درخواست میکند تا زمان خاموش شدن را تا زمانی که از مدت زمان مورد نیاز فراتر رود یا تمام کارها اجرا شوند، تمدید کند که در آن زمان سیستم خاموش میشود. تحت شرایط خاص تعریف شده در CDD، پیاده سازی دستگاه می تواند سیستم را زودتر خاموش کند. برای جزئیات در مورد الزامات سازگاری Android، به سند تعریف سازگاری Android (CDD) مراجعه کنید.
اگر VHAL باید قبل از تکمیل حالت گاراژ، سیستم را خاموش کند، VHAL میتواند SHUTDOWN_PREPARE
با پارامتر تنظیم شده روی SHUTDOWN_IMMEDIATELY
یا SLEEP_IMMEDIATELY
صادر کند. پیادهسازیهای دستگاه فقط در شرایط خاص میتوانند از این مورد استفاده کنند، معمولاً زمانی که منابع مورد نیاز برای راهاندازی سیستم در دسترس نیست. به عنوان مثال، زمانی که ظرفیت باتری ناکافی است.
شکل 1. جریان حالت گاراژ
توسعه دهندگان اپلیکیشن چگونه با Garage Mode کار می کنند؟
برنامهها و سرویسها مستقیماً با Garage Mode تعامل ندارند. در عوض، برنامهها کارها را در JobScheduler
زمانبندی میکنند. آن کارهایی که به دلیل بیکاری محدود می شوند، در حالت Garage Mode اجرا می شوند.
کد زیر نحوه برنامه ریزی یک کار را برای اجرا در حالت Garage Mode نشان می دهد:
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());
اشکال زدایی حالت گاراژ
برای رفع اشکال حالت گاراژ:- برای فعال کردن دستههای گزارش مربوط به حالت گاراژ:
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
- برای بررسی خروجی 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
- برای تعیین اینکه خروجی logcat نشان می دهد که حالت Garage به پایان رسیده است (لغو یا تکمیل شده است):
[GarageMode]: GarageMode was canceled
یا[GarageMode]: GarageMode completed normally
حالت گاراژ به وضعیت قدرت خودرو همانطور که در بالا توضیح داده شد بستگی دارد.
- خروجی 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