เมื่อผู้ใช้ไม่ได้ใช้งานอุปกรณ์ Android อุปกรณ์จะเข้าสู่สถานะ "หยุดชั่วคราว" อย่างรวดเร็วเพื่อไม่ให้แบตเตอรี่หมด อย่างไรก็ตาม บางครั้งแอปต้องป้องกันไม่ให้ CPU เข้าสู่สถานะหยุดชั่วคราว ในบางกรณี แอปอาจต้องเปิดหน้าจอไว้ขณะทำงาน ในกรณีอื่นๆ แอปไม่จำเป็นต้องเปิดหน้าจอไว้ แต่ยังคงต้องให้ CPU ทำงานอยู่
แนวทางที่คุณใช้ขึ้นอยู่กับความต้องการของแอป อย่างไรก็ตาม กฎทั่วไปคือคุณควรใช้แนวทางที่เบาที่สุดเท่าที่จะเป็นไปได้เพื่อลดผลกระทบของแอปต่อทรัพยากรของระบบ เอกสารนี้จะช่วยคุณเลือกเทคโนโลยี Android ที่เหมาะกับสถานการณ์ของคุณ
เลือกเทคโนโลยีที่เหมาะสม
ตัวเลือกที่ดีที่สุดในการทำให้อุปกรณ์ทำงานต่อไปจะขึ้นอยู่กับความต้องการของแอป ส่วนนี้จะช่วยคุณเลือกแนวทางที่เหมาะสม
- แอปของคุณจำเป็นต้องเปิดหน้าจอไว้ไหม
- หากใช่ ให้ดูให้หน้าจอเปิดอยู่เสมอ อาจมี API เฉพาะกิจที่ทํางานตามที่ต้องการ เช่น หากใช้ UI การโทร คุณสามารถใช้เฟรมเวิร์กการสื่อสารทางไกลของ Android ซึ่งจะเปิดหน้าจอไว้เมื่อจําเป็น หากไม่มี API สําหรับวัตถุประสงค์พิเศษสําหรับสถานการณ์ของคุณ คุณสามารถใช้
keepScreenOn
API
- หากใช่ ให้ดูให้หน้าจอเปิดอยู่เสมอ อาจมี API เฉพาะกิจที่ทํางานตามที่ต้องการ เช่น หากใช้ UI การโทร คุณสามารถใช้เฟรมเวิร์กการสื่อสารทางไกลของ Android ซึ่งจะเปิดหน้าจอไว้เมื่อจําเป็น หากไม่มี API สําหรับวัตถุประสงค์พิเศษสําหรับสถานการณ์ของคุณ คุณสามารถใช้
- แอปของคุณกำลังใช้บริการที่ทำงานอยู่เบื้องหน้า และคุณต้องทำให้อุปกรณ์ตื่นอยู่เสมอเมื่อหน้าจอปิดอยู่ขณะที่บริการทำงานอยู่ใช่ไหม
- หากเป็นไม่ คุณก็ไม่จำเป็นต้องปลุกให้อุปกรณ์ตื่นอยู่เสมอ หากผู้ใช้โต้ตอบกับแอปอยู่ อุปกรณ์จะยังคงทำงานอยู่ หากผู้ใช้ไม่ได้โต้ตอบกับแอปและคุณไม่ได้เรียกใช้บริการที่ทำงานอยู่เบื้องหน้า คุณควรให้อุปกรณ์เข้าสู่โหมดสลีปเมื่อจำเป็น หากต้องการตรวจสอบว่างานบางอย่างเสร็จสมบูรณ์ในขณะที่ผู้ใช้ไม่ได้อยู่ในแอป โปรดดูเอกสารประกอบเกี่ยวกับงานเบื้องหลังเพื่อค้นหาตัวเลือกที่ดีที่สุด
- หากตอบว่าใช่ ให้ตรวจสอบก่อนว่าคุณจำเป็นต้องใช้บริการที่ทำงานอยู่เบื้องหน้าจริงๆ อาจมี API สำหรับวัตถุประสงค์พิเศษบางอย่างที่คุณสามารถใช้เพื่อตอบสนองความต้องการแทนบริการที่ทำงานอยู่เบื้องหน้า ทั้งนี้ขึ้นอยู่กับสถานการณ์
ดูข้อมูลเกี่ยวกับสิ่งเหล่านี้ได้ในเอกสารประกอบเกี่ยวกับบริการที่ทำงานอยู่เบื้องหน้า เช่น หากต้องการติดตามตำแหน่งของผู้ใช้ คุณอาจใช้ Geofencing API แทนบริการที่ทำงานอยู่เบื้องหน้า
location
ได้
- การระงับอุปกรณ์ขณะที่บริการที่ทำงานอยู่เบื้องหน้าทำงานอยู่และหน้าจออุปกรณ์ปิดอยู่จะเป็นอันตรายต่อประสบการณ์ของผู้ใช้ไหม (เช่น หากคุณใช้บริการที่ทำงานอยู่เบื้องหน้าเพื่ออัปเดตการแจ้งเตือน ประสบการณ์ของผู้ใช้จะไม่แย่ลงหากอุปกรณ์ถูกระงับ)
- หากเป็น ไม่ อย่าใช้ Wakelock การดำเนินการจะกลับมาทำงานอีกครั้งโดยอัตโนมัติเมื่อผู้ใช้โต้ตอบกับอุปกรณ์ ซึ่งจะทำให้อุปกรณ์ออกจากสถานะหยุดชั่วคราว
- หากตอบว่าใช่ คุณอาจต้องใช้การล็อกการปลุก อย่างไรก็ตาม คุณควรตรวจสอบว่าคุณใช้ API อยู่แล้วหรือกำลังดำเนินการที่ประกาศการล็อกการปลุกในนามของคุณ ตามที่อธิบายไว้ในการดำเนินการที่ทำให้อุปกรณ์ตื่นอยู่เสมอ
การดำเนินการที่ทำให้อุปกรณ์ตื่นอยู่เสมอ
หากแอปของคุณกำลังดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้ คุณก็ไม่จําเป็นต้องตั้งค่าการล็อกการปลุกด้วยตนเอง การดําเนินการและ API ต่อไปนี้จะทําให้อุปกรณ์ของคุณทำงานต่อไป
- หากคุณกำลังเล่นเสียงอยู่ ระบบเสียงจะตั้งค่าและจัดการการล็อกการปลุกให้คุณโดยที่คุณไม่ต้องดำเนินการเอง
- หากคุณใช้ API หรือไลบรารีการตั้งเวลางาน เช่น WorkManager,
JobScheduler
หรือDownloadManager
ระบบหรือไลบรารีจะขอการล็อกการทำงานขณะล็อกในนามของคุณ - หากใช้ Media3 ExoPlayer คุณสามารถใช้
ExoPlayer.setWakeMode()
เพื่อให้โปรแกรมเล่นตั้งค่าการล็อกการปลุกให้คุณ - เซ็นเซอร์ของอุปกรณ์บางตัวเป็นเซ็นเซอร์ปลุก คุณสามารถใช้
SensorManager
เพื่อให้เซ็นเซอร์เหล่านั้นปลุกอุปกรณ์เมื่อมีข้อมูลที่จะรายงาน หากต้องการตรวจสอบว่าเซ็นเซอร์เป็นเซ็นเซอร์ปลุกระบบหรือไม่ ให้เรียกใช้Sensor.isWakeUpSensor