เพิ่มประสิทธิภาพการใช้ตำแหน่งสำหรับสถานการณ์ในชีวิตจริง

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

การอัปเดตที่ผู้ใช้มองเห็นหรืออยู่เบื้องหน้า

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

ใช้เมธอด setPriority() ที่มีค่าเป็น PRIORITY_HIGH_ACCURACY หรือ PRIORITY_BALANCED_POWER_ACCURACY

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

ทราบตำแหน่งของอุปกรณ์

ตัวอย่างเช่น แอปสภาพอากาศต้องการทราบตำแหน่งของอุปกรณ์

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

เริ่มอัปเดตเมื่อผู้ใช้อยู่ที่ตำแหน่งที่เฉพาะเจาะจง

ตัวอย่างเช่น การขอข้อมูลอัปเดตเมื่อผู้ใช้อยู่ในระยะที่กำหนดจากที่ทำงาน บ้าน หรือสถานที่อื่น

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

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

เริ่มอัปเดตตามสถานะกิจกรรมของผู้ใช้

ตัวอย่างเช่น ขอการอัปเดตเฉพาะเมื่อผู้ใช้ขับรถหรือขี่จักรยาน

ใช้ Activity Recognition API ร่วมกับการอัปเดตผู้ให้บริการตำแหน่งแบบรวม ขอการอัปเดตเมื่อตรวจพบกิจกรรมเป้าหมาย และนําการอัปเดตออกเมื่อผู้ใช้หยุดทํากิจกรรมนั้น

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

การอัปเดตตำแหน่งในเบื้องหลังที่ทำงานต่อเนื่องเป็นเวลานานซึ่งเชื่อมโยงกับพื้นที่ทางภูมิศาสตร์

ตัวอย่างเช่น ผู้ใช้ต้องการรับการแจ้งเตือนเมื่ออุปกรณ์อยู่ใกล้ๆ ผู้ค้าปลีก

นี่เป็นกรณีการใช้งานที่ยอดเยี่ยมสําหรับการกำหนดเขตพื้นที่เสมือน เนื่องจากกรณีการใช้งานเกือบจะเกี่ยวข้องกับตําแหน่งในเบื้องหลัง ให้ใช้วิธีการ addGeofences(GeofencingRequest, PendingIntent)

คุณควรตั้งค่าตัวเลือกการกําหนดค่าต่อไปนี้

  • หากคุณกำลังติดตามการเปลี่ยนสถานะการหยุดอยู่ที่หน้าเว็บ ให้ใช้เมธอด setLoiteringDelay() ที่ส่งค่าประมาณ 5 นาทีหรือน้อยกว่า

  • ใช้ setNotificationResponsiveness() โดยส่งค่าประมาณ 5 นาที อย่างไรก็ตาม ให้พิจารณาใช้ค่าประมาณ 10 นาทีหากแอปของคุณจัดการกับความล่าช้าในการตอบสนองที่เพิ่มขึ้นได้

แอปจะลงทะเบียนเขตพื้นที่เสมือนได้สูงสุดครั้งละ 100 รายการเท่านั้น ใน Use Case ที่แอปต้องการติดตามตัวเลือกผู้ค้าปลีกจํานวนมาก แอปอาจต้องลงทะเบียนเขตพื้นที่เสมือนขนาดใหญ่ (ที่ระดับเมือง) และลงทะเบียนเขตพื้นที่เสมือนขนาดเล็กแบบไดนามิก (สําหรับสถานที่ภายในเมือง) สําหรับร้านค้าภายในเขตพื้นที่เสมือนขนาดใหญ่ เมื่อผู้ใช้เข้าสู่เขตพื้นที่เสมือนขนาดใหญ่ ให้เพิ่มเขตพื้นที่เสมือนขนาดเล็ก เมื่อผู้ใช้ออกจากเขตพื้นที่เสมือนขนาดใหญ่ ให้นำเขตพื้นที่เสมือนขนาดเล็กออกและลงทะเบียนเขตพื้นที่เสมือนใหม่สำหรับพื้นที่ใหม่

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

ตัวอย่าง: แอปที่ติดตามตำแหน่งแบบไม่โต้ตอบ

ใช้วิธีการ setPriority() กับตัวเลือก PRIORITY_NO_POWER หากเป็นไปได้ เนื่องจากแทบจะไม่ทำให้แบตเตอรี่หมด หากใช้ PRIORITY_NO_POWER ไม่ได้ ให้ใช้ PRIORITY_BALANCED_POWER_ACCURACY หรือ PRIORITY_LOW_POWER แต่หลีกเลี่ยงการใช้ PRIORITY_HIGH_ACCURACY สำหรับการทำงานในเบื้องหลังอย่างต่อเนื่อง เนื่องจากตัวเลือกนี้จะกินแบตเตอรี่อย่างมาก

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

ควบคุมความถี่ด้วยการเพิ่มเวลาในการตอบสนองโดยใช้เมธอด setMaxWaitTime() ตัวอย่างเช่น หากคุณใช้เมธอด setinterval() ที่มีค่าประมาณ 10 นาที คุณควรพิจารณาเรียกใช้ setMaxWaitTime() ที่มีค่าระหว่าง 30 ถึง 60 นาที เมื่อใช้ตัวเลือกเหล่านี้ ระบบจะคํานวณตําแหน่งของแอปทุกๆ 10 นาทีโดยประมาณ แต่แอปจะตื่นขึ้นทุกๆ 30-60 นาทีเมื่อมีข้อมูลตําแหน่งบางส่วนพร้อมใช้งานสำหรับการอัปเดตแบบเป็นกลุ่ม แนวทางนี้ใช้การรอสายเพื่อแลกกับข้อมูลที่พร้อมใช้งานมากขึ้นและประสิทธิภาพแบตเตอรี่ที่ดีขึ้น

การอัปเดตความแม่นยำสูงบ่อยครั้งขณะที่ผู้ใช้โต้ตอบกับแอปอื่นๆ

ตัวอย่างเช่น แอปการนำทางหรือแอปฟิตเนสที่ทำงานต่อไปเมื่อผู้ใช้ปิดหน้าจอหรือเปิดแอปอื่น

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