כדי לספק תקופות של זמן סרק ברכבים, מצב מוסך שומר על המערכת ערה כך שניתן לבצע עבודות ב- JobScheduler עם סרק .
מהו מצב מוסך?
במכשירים מחוברים כגון טלפונים, משתמשים מסתמכים על המערכת כדי להבטיח שהמכשירים יהיו יציבים, מעודכנים ומוטבים. כדי להשיג מצב זה, פלטפורמת אנדרואיד מספקת חלון זמן סרק שבמהלכו יישומים יכולים לבצע משימות כאשר המשתמש אינו מקיים אינטראקציה עם המכשיר. טלפון נחשב לבטל כאשר המשתמש אינו נוגע בו למשך זמן ממושך (60 דקות או יותר) והמסך כבוי. בניגוד לטלפון, כאשר רכב אינו בשימוש, הוא כבוי, מה שאומר שלמכונית אין חלון זמן סרק . מצב מוסך מבטיח זמן סרק במכונית.
כאשר מכונית מכובה על ידי המשתמש, המערכת נכנסת למצב מוסך. בזמן שמכונית נמצאת במצב מוסך, המערכת מופעלת, התצוגה כבויה ועבודות סרק בתור JobScheduler מבוצעות. כדי ליישם את מצב Garage, עיין בהנחיות להטמעת מכשיר למטה.
הנחיות ליישום מכשיר
כדי להפעיל מצב מוסך, בעת כיבוי הרכב, ה-HAL של הרכב (VHAL) חייב לשלוח AP_POWER_STATE_REQ
עם המצב SHUTDOWN_PREPARE
עם הפרמטר מוגדר ל- SHUTDOWN_ONLY
או CAN_SLEEP
.
כדי שהמצב SHUTDOWN_PREPARE
יהיה יעיל, ה-VHAL חייב לציין את שני הפרמטרים (מצב והפרמטר הנוסף) עבור הפקודה AP_POWER_STATE_REQ
. זה מאפשר למכשיר להיכנס למצב Garage, שמזהה עבודות מתוזמנות ב- JobScheduler ומונע מהמערכת להמשיך להשהות או כיבוי עד להשלמת העבודות.
איך יישומי מכשירים מתחברים למסגרת אנדרואיד?
עבור מצב Garage, המסגרת מבקשת מה-VHAL להאריך את זמן הכיבוי עד לחרוג מהמשך הנדרש או שכל העבודות בוצעו, ואז המערכת תכבה. בנסיבות ספציפיות המוגדרות ב-CDD, יישומי מכשירים יכולים לכבות את המערכת מוקדם יותר. (לפרטים על דרישות תאימות אנדרואיד, עיין במסמך הגדרת תאימות אנדרואיד (CDD) .) אם ה-VHAL חייב לכבות את המערכת לפני סיום מצב המוסך, ה-VHAL יכול להנפיק SHUTDOWN_PREPARE
עם הפרמטר מוגדר ל- SHUTDOWN_IMMEDIATELY
או SLEEP_IMMEDIATELY
. יישומי מכשירים יכולים להשתמש בזה בנסיבות ספציפיות בלבד , בדרך כלל כאשר המשאבים הדרושים כדי לשמור על המערכת פועלת אינם זמינים. לדוגמה, כאשר קיבולת הסוללה אינה מספקת.
איך מפתחי יישומים עובדים עם Garage Mode?
יישומים ושירותים אינם מקיימים אינטראקציה ישירה עם מצב המוסך. במקום זאת, אפליקציות מתזמנות עבודות ב- JobScheduler . עבודות אלו המוגבלות על ידי בטלה מבוצעות במהלך מצב Garage.
הקוד הבא מראה כיצד לתזמן עבודה להפעלה במהלך מצב מוסך:
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