מצב חנייה

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

מה זה מצב חנייה?

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

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

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

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

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

איך הטמעות מכשירים מתחברים ל-framework של Android?

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

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

מצב חנייה

איור 1. תהליך עבודה במצב החניה

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

לאפליקציות ולשירותים אין אינטראקציה ישירה עם 'מצב חנייה'. במקום זאת, אפליקציות מתזמנות עבודות ב: 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