ทำตามขั้นตอนต่อไปนี้เพื่อปรับปรุงผลกระทบของแอป ต่ออายุการใช้งานแบตเตอรี่ของอุปกรณ์เมื่อใช้บริการตำแหน่ง
นำการอัปเดตตำแหน่งออก
สาเหตุทั่วไปที่ทำให้แบตเตอรี่หมดเร็วโดยไม่จำเป็นคือการไม่นำการอัปเดตตำแหน่งออกเมื่อไม่ต้องการใช้แล้ว
ปัญหานี้อาจเกิดขึ้นเมื่อเมธอดวงจร onStart() หรือ onResume()
ของกิจกรรมมีการเรียกใช้ requestlocationUpdates() โดยไม่มีการเรียกใช้ removeLocationUpdates() ที่สอดคล้องกันในเมธอดวงจร onPause() หรือ onStop()
คุณสามารถใช้คอมโพเนนต์ที่รับรู้ถึงวงจรเพื่อจัดการวงจรของ กิจกรรมในแอปได้ดียิ่งขึ้น ดูข้อมูลเพิ่มเติมได้ที่การจัดการวงจรด้วย คอมโพเนนต์ที่รับรู้ถึงวงจร
ตั้งค่าการหมดเวลา
ตั้งค่าการหมดเวลาที่เหมาะสมเมื่อการอัปเดตตำแหน่งควรหยุดเพื่อป้องกันแบตเตอรี่หมดเร็ว การหมดเวลาช่วยให้มั่นใจได้ว่าการอัปเดตจะไม่ดำเนินต่อไปเรื่อยๆ และ ยังช่วยปกป้องแอปในสถานการณ์ที่มีการขออัปเดตแต่ไม่ได้นำออก (เช่น เนื่องจากมีข้อบกพร่องในโค้ด)
สำหรับคำขอผู้ให้บริการ Fused Location ให้เพิ่มการหมดเวลาโดยการเรียกใช้
setDurationMillis() ซึ่งจะรับพารามิเตอร์ที่แสดงถึง
เวลาเป็นมิลลิวินาทีนับตั้งแต่มีการเรียกใช้เมธอดครั้งล่าสุด นอกจากนี้ คุณยังใช้วิธี
เพื่อแสดงเวลาหมดอายุในรูปของระยะเวลาได้ด้วย
หากต้องการเพิ่มการหมดเวลาให้กับคำขอตำแหน่ง Geofence ให้เรียกใช้เมธอด
setExpirationDuration()
คำขอแบบกลุ่ม
สำหรับการใช้งานทั้งหมดที่ไม่ได้อยู่เบื้องหน้า ให้จัดกลุ่มคำขอหลายรายการเข้าด้วยกัน ใช้วิธีการ
setIntervalMillis() เพื่อระบุช่วงเวลาที่คุณต้องการให้ระบบคำนวณ
ตำแหน่ง จากนั้นใช้วิธี setMaxUpdateDelayMillis() เพื่อตั้งค่า
ช่วงเวลาที่ส่งตำแหน่งไปยังแอปของคุณ ส่งค่าไปยังเมธอด
setMaxUpdateDelayMillis() ซึ่งเป็นค่าที่คูณด้วยค่าที่ส่งไปยังเมธอด
setIntervalMillis() ตัวอย่างเช่น ลองพิจารณาคำขอตำแหน่งต่อไปนี้
Kotlin
val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
.setMaxUpdateDelayMillis(60 * 60 * 1000)
.build()
Java
LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
.setMaxUpdateDelayMillis(60 * 60 * 1000)
.build();
ในกรณีนี้ ระบบจะคำนวณตำแหน่งทุกๆ 10 นาทีโดยประมาณ และ ส่งจุดข้อมูลตำแหน่งประมาณ 6 จุดในกลุ่มทุกๆ 1 ชั่วโมงโดยประมาณ แม้ว่าคุณจะยังคงได้รับการอัปเดตตำแหน่งทุกๆ 10 นาที แต่คุณจะประหยัดแบตเตอรี่ได้เนื่องจากอุปกรณ์จะตื่นขึ้นทุกๆ 1 ชั่วโมง
ใช้การอัปเดตตำแหน่งแบบพาสซีฟ
ในกรณีการใช้งานในเบื้องหลัง เราขอแนะนำให้จำกัดการอัปเดตตำแหน่ง Android 8.0 (ระดับ API 26) กำหนดให้ต้องปฏิบัติตามแนวทางนี้ แต่แอปที่ทำงานในอุปกรณ์รุ่นต่ำกว่า ควรพยายามจำกัดตำแหน่งในเบื้องหลังให้ได้มากที่สุด
เป็นไปได้ว่าขณะที่แอปของคุณทำงานอยู่เบื้องหลัง แอปอื่นอาจ ขออัปเดตตำแหน่งในเบื้องหน้าบ่อยครั้ง บริการตำแหน่ง ทำให้แอปของคุณได้รับการอัปเดตเหล่านี้ โปรดพิจารณาคำขอตำแหน่งต่อไปนี้ ซึ่งใช้ข้อมูลตำแหน่งตามโอกาส
Kotlin
val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
.setMinUpdateIntervalMillis(2 * 60 * 1000)
.build()
Java
LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
.setMinUpdateIntervalMillis(2 * 60 * 1000)
.build();
ในตัวอย่างก่อนหน้า ตำแหน่งของแอปจะคำนวณทุกๆ 15 นาทีโดยประมาณ หากแอปอื่นๆ ขอตำแหน่ง แอปจะได้รับข้อมูลในช่วงเวลาสูงสุด 2 นาที
แม้ว่าการใช้ตำแหน่งแบบพาสซีฟจะไม่ทำให้แบตเตอรี่หมดเร็ว แต่คุณควรระมัดระวังเป็นพิเศษในกรณีที่การรับข้อมูลตำแหน่งทริกเกอร์การทำงานของ CPU หรือ I/O ที่มีค่าใช้จ่ายสูง เพื่อลดต้นทุนแบตเตอรี่ ช่วงเวลาที่ระบุใน
setMinUpdateIntervalMillis() ไม่ควรสั้นเกินไป