מצב מוסך

כדי לספק תקופות של זמן סרק בכלי רכב, מצב Garage שומר על המערכת ערה כך שניתן לבצע עבודות ב- JobScheduler עם סרק .

מהו מצב מוסך?

במכשירים מחוברים כגון טלפונים, משתמשים מסתמכים על המערכת כדי להבטיח שהמכשירים יהיו יציבים, מעודכנים ומוטבים. כדי להשיג מצב זה, פלטפורמת אנדרואיד מספקת חלון זמן סרק שבמהלכו אפליקציות יכולות לבצע משימות כאשר המשתמש אינו מקיים אינטראקציה עם המכשיר. טלפון נחשב לבטל כאשר המשתמש אינו נוגע בו למשך זמן ממושך (60 דקות או יותר) והמסך כבוי. בניגוד לטלפון, כאשר מכונית אינה בשימוש, הוא כבוי, מה שאומר שלמכונית אין חלון זמן סרק . מצב מוסך מבטיח זמן סרק במכונית.

כאשר מכונית מכובה על ידי המשתמש, המערכת נכנסת למצב מוסך. בזמן שמכונית נמצאת במצב מוסך, המערכת מופעלת, התצוגה כבויה ועבודות סרק בתור JobScheduler מבוצעות. כדי להטמיע מצב מוסך, ראה הנחיות ליישום מכשיר .

הנחיות ליישום מכשיר

כדי להפעיל מצב מוסך, בעת כיבוי הרכב, ה-HAL של הרכב (VHAL) חייב לשלוח AP_POWER_STATE_REQ עם המצב SHUTDOWN_PREPARE עם הפרמטר מוגדר ל- SHUTDOWN_ONLY או CAN_SLEEP .

כדי שהמצב SHUTDOWN_PREPARE יהיה יעיל, ה-VHAL חייב לציין את שני הפרמטרים (מצב והפרמטר הנוסף) עבור הפקודה AP_POWER_STATE_REQ . זה מאפשר למכשיר להיכנס למצב Garage, שמזהה עבודות מתוזמנות ב- JobScheduler ומונע מהמערכת להמשיך להשהות או כיבוי עד להשלמת העבודות.

איך יישומי מכשירים מתחברים למסגרת אנדרואיד?

עבור מצב מוסך, המסגרת מבקשת מה-VHAL להאריך את זמן הכיבוי עד לחרוג מהמשך הנדרש או שכל העבודות בוצעו, אז המערכת נכבית. בנסיבות ספציפיות המוגדרות ב-CDD, יישומי מכשירים יכולים לכבות את המערכת מוקדם יותר. לפרטים על דרישות תאימות אנדרואיד, עיין במסמך הגדרת תאימות אנדרואיד (CDD) .

אם ה-VHAL חייב לכבות את המערכת לפני סיום מצב המוסך, ה-VHAL יכול להנפיק SHUTDOWN_PREPARE עם הפרמטר שהוגדר ל- SHUTDOWN_IMMEDIATELY או SLEEP_IMMEDIATELY . יישומי מכשירים יכולים להשתמש בזה בנסיבות ספציפיות בלבד , בדרך כלל כאשר המשאבים הדרושים כדי לשמור על המערכת פועלת אינם זמינים. לדוגמה, כאשר קיבולת הסוללה אינה מספקת.

מצב מוסך

איור 1. זרימת מצב מוסך

איך מפתחי אפליקציות עובדים עם מצב Garage?

אפליקציות ושירותים אינם מקיימים אינטראקציה ישירה עם מצב המוסך. במקום זאת, אפליקציות מתזמנות עבודות ב- 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());

ניפוי באגים במצב מוסך

כדי לנפות באגים במצב מוסך:
  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 כדי לציין שמצב 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
    
    או
    [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