โหมดโรงรถจะเปิดระบบไว้เพื่อให้ทำงานได้ในช่วงที่มีเวลาว่างในรถ จึงทำให้งานใน JobScheduler
ที่มีข้อจำกัดด้านเวลาว่างทำงานได้
โหมดโรงรถคืออะไร
ในอุปกรณ์ที่เชื่อมต่ออินเทอร์เน็ต เช่น โทรศัพท์ ผู้ใช้ต้องอาศัยระบบเพื่อให้อุปกรณ์ทำงานได้อย่างเสถียร เป็นเวอร์ชันล่าสุด และเพิ่มประสิทธิภาพ แพลตฟอร์ม Android มีกรอบเวลาเวลาที่ไม่ได้ใช้งานเพื่อให้แอปทำงานได้เมื่อผู้ใช้ไม่ได้โต้ตอบกับอุปกรณ์ ระบบจะถือว่าโทรศัพท์ไม่มีการใช้งานเมื่อผู้ใช้ไม่ได้สัมผัสโทรศัพท์เป็นเวลานาน (60 นาทีขึ้นไป) และหน้าจอปิดอยู่ ซึ่งต่างจากโทรศัพท์ตรงที่เมื่อไม่ได้ใช้งาน รถจะปิดอยู่ ซึ่งหมายความว่ารถไม่มีกรอบเวลาไม่มีการใช้งาน โหมดโรงรถจะตรวจสอบเวลาที่ไม่มีการใช้งานในรถ
เมื่อผู้ใช้ปิดรถ ระบบจะเข้าสู่โหมดโรงรถ ขณะที่รถอยู่ในโหมดโรงรถ ระบบจะเปิดเครื่อง ปิดจอแสดงผล และทำงานที่ไม่มีการใช้งานในคิว JobScheduler
หากต้องการใช้โหมดโรงรถ โปรดดูหลักเกณฑ์การติดตั้งใช้งานอุปกรณ์
หลักเกณฑ์การติดตั้งใช้งานอุปกรณ์
หากต้องการเปิดใช้งานโหมดโรงรถ เมื่อปิดรถ HAL ของยานพาหนะ (VHAL) ต้องส่ง AP_POWER_STATE_REQ
ที่มีสถานะ SHUTDOWN_PREPARE
โดยตั้งค่าพารามิเตอร์เป็น SHUTDOWN_ONLY
หรือ CAN_SLEEP
VHAL ต้องระบุพารามิเตอร์ 2 รายการ (สถานะและพารามิเตอร์เพิ่มเติม) สําหรับคําสั่ง AP_POWER_STATE_REQ
เพื่อให้สถานะ SHUTDOWN_PREPARE
มีผล ซึ่งจะช่วยให้อุปกรณ์เข้าสู่โหมดโรงรถได้ ซึ่งจะตรวจหางานที่กําหนดเวลาไว้ใน JobScheduler
และป้องกันไม่ให้ระบบระงับหรือปิดจนกว่างานจะเสร็จสมบูรณ์
การติดตั้งใช้งานอุปกรณ์เชื่อมต่อกับเฟรมเวิร์ก Android อย่างไร
สำหรับโหมดโรงรถ เฟรมเวิร์กจะขอให้ VHAL ขยายเวลาการปิดระบบจนกว่าจะเกินระยะเวลาที่กำหนดหรือมีการดำเนินการงานทั้งหมดแล้ว ระบบก็จะปิด การติดตั้งใช้งานอุปกรณ์อาจปิดระบบเร็วขึ้นในบางสถานการณ์ที่ระบุไว้ใน CDD ดูรายละเอียดเกี่ยวกับข้อกำหนดความเข้ากันได้ของ Android ได้ที่เอกสารนิยามความเข้ากันได้ (CDD) ของ Android
หาก VHAL ต้องปิดระบบก่อนที่โหมดโรงรถจะเสร็จสมบูรณ์ VHAL สามารถออกคำสั่ง SHUTDOWN_PREPARE
โดยตั้งค่าพารามิเตอร์เป็น SHUTDOWN_IMMEDIATELY
หรือ SLEEP_IMMEDIATELY
การติดตั้งใช้งานอุปกรณ์จะใช้วิธีนี้เท่านั้นภายใต้สถานการณ์ที่เฉพาะเจาะจง โดยปกติแล้วจะเป็นเมื่อไม่มีทรัพยากรที่จำเป็นต่อการรักษาให้ระบบทำงานต่อไป เช่น เมื่อความจุแบตเตอรี่ไม่เพียงพอ
รูปที่ 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());
โหมดแก้ไขข้อบกพร่องของโรงรถ
วิธีแก้ไขข้อบกพร่องของโหมดโรงรถ- วิธีเปิดใช้หมวดหมู่การบันทึกที่เกี่ยวข้องกับโหมดโรงรถ
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 เพื่อระบุว่าโหมดโรงรถกำลังเริ่มต้น
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 ระบุว่าโหมดโรงรถเสร็จสิ้นแล้ว (ยกเลิกหรือเสร็จสมบูรณ์)
หรือ[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