เพิ่มประสิทธิภาพการใช้ตำแหน่งเพื่อยืดอายุการใช้งานแบตเตอรี่

ดำเนินการต่อไปนี้เพื่อปรับปรุงผลกระทบของแอปต่ออายุการใช้งานแบตเตอรี่ของอุปกรณ์เมื่อใช้บริการตำแหน่ง

นำการอัปเดตตำแหน่งออก

สาเหตุที่พบบ่อยของการสิ้นเปลืองแบตเตอรี่โดยไม่จำเป็นคือการไม่นำการอัปเดตตำแหน่งออกเมื่อไม่จำเป็นต้องใช้แล้ว

กรณีนี้อาจเกิดขึ้นเมื่อเมธอดวงจรชีวิตของ onStart() หรือ onResume() ของกิจกรรมมีการเรียกใช้ requestlocationUpdates() โดยไม่เรียกใช้ removeLocationUpdates() ที่สอดคล้องกันในเมธอดวงจรชีวิตของ onPause() หรือ onStop()

คุณสามารถใช้คอมโพเนนต์ที่รับรู้วงจรเพื่อจัดการวงจรของกิจกรรมในแอปได้ดียิ่งขึ้น ดูข้อมูลเพิ่มเติมได้ที่การจัดการวงจรด้วยคอมโพเนนต์ที่รับรู้วงจร

ตั้งค่าการหมดเวลา

ตั้งค่าการหมดเวลาที่เหมาะสมเมื่อการอัปเดตตำแหน่งควรหยุดเพื่อถนอมแบตเตอรี่ การหมดเวลาช่วยให้มั่นใจได้ว่าการอัปเดตจะไม่ดำเนินต่อไปอย่างไม่มีกำหนด และปกป้องแอปในสถานการณ์ที่ระบบขอการอัปเดตแต่ไม่ได้นําออก (เช่น เนื่องจากข้อบกพร่องในโค้ด)

สําหรับคําขอผู้ให้บริการตําแหน่งแบบรวม ให้เพิ่มการหมดเวลาโดยเรียกใช้ setExpirationDuration() ซึ่งจะรับพารามิเตอร์ที่แสดงเวลาเป็นมิลลิวินาทีนับตั้งแต่มีการเรียกใช้เมธอดครั้งล่าสุด นอกจากนี้ คุณยังเพิ่มการหมดเวลาได้โดยเรียกใช้ setExpirationTime() ซึ่งจะรับพารามิเตอร์ที่แสดงถึงเวลาหมดอายุเป็นมิลลิวินาทีนับตั้งแต่ระบบบูตครั้งล่าสุด

หากต้องการเพิ่มการหมดเวลาในคำขอตำแหน่งของเขตพื้นที่เสมือน ให้เรียกใช้เมธอด setExpirationDuration()

คำขอแบบเป็นกลุ่ม

สำหรับกรณีการใช้งานที่ไม่ใช่เบื้องหน้าทั้งหมด ให้ส่งคำขอหลายรายการพร้อมกันเป็นกลุ่ม ใช้เมธอด setInterval() เพื่อระบุช่วงเวลาที่คุณต้องการให้คำนวณตำแหน่ง จากนั้นใช้เมธอด setMaxWaitTime() เพื่อกำหนดช่วงเวลาที่ส่งตำแหน่งไปยังแอปของคุณ ส่งค่าไปยังเมธอด setMaxWaitTime() ที่เป็นจำนวนที่คูณกับค่าที่ส่งไปยังเมธอด setInterval() ตัวอย่างเช่น ลองพิจารณาคำขอตำแหน่งต่อไปนี้

Kotlin

val request = LocationRequest()
request.setInterval(10 * 60 * 1000)
request.setMaxWaitTime(60 * 60 * 1000)

Java

LocationRequest request = new LocationRequest();
request.setInterval(10 * 60 * 1000);
request.setMaxWaitTime(60 * 60 * 1000);

ในกรณีนี้ ระบบจะคํานวณตําแหน่งทุกๆ 10 นาทีโดยประมาณ และส่งจุดข้อมูลตําแหน่งประมาณ 6 จุดเป็นกลุ่มทุกๆ 1 ชั่วโมงโดยประมาณ แม้ว่าคุณจะยังได้รับการอัปเดตตำแหน่งทุกๆ 10 นาที แต่ก็จะประหยัดแบตเตอรี่ได้เนื่องจากอุปกรณ์จะตื่นขึ้นทุกๆ ชั่วโมงเท่านั้น

ใช้การอัปเดตตำแหน่งแบบไม่ระบุแหล่งที่มา

ใน Use Case เบื้องหลัง เราขอแนะนำให้จำกัดการอัปเดตตำแหน่ง Android 8.0 (API ระดับ 26) จำกัดการบังคับใช้แนวทางนี้ แต่แอปที่ทำงานในอุปกรณ์ที่ต่ำกว่าควรพยายามจำกัดตำแหน่งในเบื้องหลังให้มากที่สุด

เป็นไปได้ว่าขณะที่แอปของคุณทำงานอยู่เบื้องหลัง แอปอื่นอาจขอการอัปเดตตำแหน่งบ่อยครั้งในเบื้องหน้า บริการตำแหน่งทำให้การอัปเดตเหล่านี้พร้อมใช้งานสำหรับแอปของคุณ โปรดพิจารณาคำขอตำแหน่งต่อไปนี้ ซึ่งจะใช้ข้อมูลตำแหน่งเมื่อมีโอกาส

Kotlin

val request = LocationRequest()
request.setInterval(15 * 60 * 1000)
request.setFastestInterval(2 * 60 * 1000)

Java

LocationRequest request = new LocationRequest();
request.setInterval(15 * 60 * 1000);
request.setFastestInterval(2 * 60 * 1000);

ในตัวอย่างก่อนหน้านี้ ตำแหน่งของแอปจะคำนวณทุกๆ 15 นาทีโดยประมาณ หากแอปอื่นๆ ขอตำแหน่ง แอปจะได้รับข้อมูลเป็นช่วงๆ สูงสุด 2 นาที

แม้ว่าการใช้ตำแหน่งแบบพาสซีฟจะไม่ทำให้แบตเตอรี่หมด แต่โปรดระมัดระวังเป็นพิเศษในกรณีที่การรับข้อมูลตำแหน่งทริกเกอร์การดำเนินการ CPU หรือ I/O ที่สิ้นเปลืองพลังงาน ช่วงเวลาที่ระบุใน setFastestInterval() ไม่ควรสั้นเกินไปเพื่อลดค่าใช้จ่ายของแบตเตอรี่