โหมดโรงรถ

ในการจัดเตรียมช่วงเวลาที่ไม่ได้ใช้งานในยานพาหนะ โหมดโรงรถ ช่วยให้ระบบทำงานเพื่อให้งานใน 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 โปรดดู เอกสารข้อกำหนดความเข้ากันได้ของ Android (CDD) ) หาก VHAL ต้องปิดระบบก่อนที่โหมดโรงรถจะเสร็จสิ้น VHAL สามารถออก SHUTDOWN_PREPARE โดยตั้งค่าพารามิเตอร์เป็น SHUTDOWN_IMMEDIATELY หรือ SLEEP_IMMEDIATELY การใช้งานอุปกรณ์สามารถใช้สิ่งนี้ได้ภายใต้สถานการณ์ เฉพาะเท่านั้น โดยทั่วไปเมื่อทรัพยากรที่จำเป็นเพื่อให้ระบบทำงานไม่พร้อมใช้งาน ตัวอย่างเช่น เมื่อความจุของแบตเตอรี่ไม่เพียงพอ

โหมดโรงรถ

นักพัฒนาแอพพลิเคชั่นทำงานกับโหมดโรงรถอย่างไร?

แอปพลิเคชันและบริการจะไม่โต้ตอบกับโหมดโรงรถโดยตรง แอปจะกำหนดเวลางานใน 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