โหมดโรงรถ

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

    โหมด Garage ขึ้นอยู่กับอำนาจรัฐของยานพาหนะตามที่อธิบายไว้ ข้างต้น

  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