ขีดจำกัดของตำแหน่งในพื้นหลัง

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

หมายเหตุ: ข้อจำกัดเหล่านี้มีผลกับแอปทั้งหมดที่ใช้ในอุปกรณ์ที่ใช้ Android 8.0 (API ระดับ 26) ขึ้นไป โดยไม่คำนึงถึงเวอร์ชัน SDK เป้าหมายของแอป

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

เก็บรักษาลักษณะการทํางานของแอปที่ทำงานอยู่เบื้องหน้า

หากแอปทำงานอยู่เบื้องหน้าในอุปกรณ์ที่ใช้ Android 8.0 (API ระดับ 26) ลักษณะการอัปเดตตำแหน่งจะเหมือนกับใน Android 7.1.1 (API ระดับ 25) และต่ำกว่า

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

การปรับลักษณะการทํางานของตําแหน่งของแอป

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

  • ดึงแอปมาไว้ที่เบื้องหน้า
  • เริ่มบริการที่ทำงานอยู่เบื้องหน้าในแอปโดยเรียกใช้ startForegroundService() เมื่อบริการที่ทำงานอยู่เบื้องหน้าดังกล่าวทำงานอยู่ บริการจะปรากฏเป็นการแจ้งเตือนต่อเนื่องในพื้นที่การแจ้งเตือน

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

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

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

API ที่ได้รับผลกระทบ

การเปลี่ยนแปลงลักษณะการดึงข้อมูลตำแหน่งในแอปที่ทำงานอยู่เบื้องหลังจะส่งผลต่อ API ต่อไปนี้

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

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

  • หากแอปทำงานอยู่เบื้องหน้า อัตราการสุ่มตัวอย่างตำแหน่งจะไม่มีการเปลี่ยนแปลงเมื่อเทียบกับ Android 7.1.1 (API ระดับ 25)
การกำหนดเขตพื้นที่เสมือน
  • แอปที่ทำงานอยู่เบื้องหลังจะรับเหตุการณ์การเปลี่ยนเขตพื้นที่เสมือนได้บ่อยกว่าการอัปเดตจาก Fused Location Provider
  • การตอบสนองโดยเฉลี่ยสําหรับเหตุการณ์การกำหนดเขตพื้นที่เสมือนคือทุก 2-3 นาที
การวัด GNSS และข้อความการนำทาง GNSS
  • เมื่อแอปทำงานอยู่เบื้องหลัง แคล็กแบ็กที่ลงทะเบียนเพื่อรับเอาต์พุตจาก GnssMeasurement และ GnssNavigationMessage จะหยุดทำงาน
เครื่องมือจัดการตำแหน่ง
  • ระบบจะส่งการอัปเดตตำแหน่งไปยังแอปที่ทำงานอยู่เบื้องหลังเพียงไม่กี่ครั้งในแต่ละชั่วโมง

    หมายเหตุ: หากแอปทำงานในอุปกรณ์ที่ติดตั้งบริการ Google Play เราขอแนะนำให้ใช้ผู้ให้บริการตำแหน่งแบบรวม (FLP) แทน

เครื่องมือจัดการ Wi-Fi
เมธอด startScan() จะสแกนแอปเบื้องหลังอย่างเต็มรูปแบบเพียงไม่กี่ครั้งต่อชั่วโมง หากแอปเบื้องหลังเรียกใช้เมธอดนี้อีกครั้งในไม่ช้าหลังจากนั้น คลาส WifiManager จะแสดงผลลัพธ์ที่แคชไว้จากการสแกนครั้งก่อนหน้า