ดำเนินการต่อไปนี้เพื่อปรับปรุงผลกระทบของแอปต่ออายุการใช้งานแบตเตอรี่ของอุปกรณ์เมื่อใช้บริการตำแหน่ง
นำการอัปเดตตำแหน่งออก
สาเหตุที่พบบ่อยของการสิ้นเปลืองแบตเตอรี่โดยไม่จำเป็นคือการไม่นำการอัปเดตตำแหน่งออกเมื่อไม่จำเป็นต้องใช้แล้ว
กรณีนี้อาจเกิดขึ้นเมื่อเมธอดวงจรชีวิตของ 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()
ไม่ควรสั้นเกินไปเพื่อลดค่าใช้จ่ายของแบตเตอรี่