Giới hạn vị trí trong nền
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Nhằm giảm mức tiêu thụ pin, Android 8.0 (API cấp 26) giới hạn tần suất ứng dụng có thể truy xuất vị trí hiện tại của người dùng trong khi ứng dụng đang chạy ở chế độ nền. Trong những điều kiện này, ứng dụng chỉ có thể nhận được thông tin cập nhật vị trí vài lần mỗi giờ.
Lưu ý: Những giới hạn này áp dụng cho tất cả ứng dụng dùng trên các thiết bị chạy Android 8.0 (API cấp 26) trở lên, bất kể phiên bản SDK mục tiêu của ứng dụng.
Bạn cần đặc biệt lưu ý đến hành vi truy xuất thông tin vị trí này nếu ứng dụng của bạn dựa vào cảnh báo theo thời gian thực hoặc tính năng phát hiện chuyển động khi chạy ở chế độ nền.
Hành vi của ứng dụng trên nền trước được giữ nguyên
Nếu một ứng dụng đang chạy trên nền trước trên thiết bị chạy Android 8.0 (API cấp 26), thì hành vi cập nhật vị trí sẽ giống như trên Android 7.1.1 (API cấp 25) trở xuống.
Cảnh báo: Nếu ứng dụng của bạn truy xuất thông tin cập nhật vị trí gần như theo thời gian thực trong một khoảng thời gian dài, thì thời lượng pin của thiết bị sẽ ngắn hơn đáng kể.
Điều chỉnh hành vi liên quan đến vị trí của ứng dụng
Cân nhắc xem các trường hợp sử dụng của ứng dụng để chạy ở chế độ nền có thể thành công hay không nếu ứng dụng của bạn nhận được thông tin cập nhật vị trí không thường xuyên. Nếu trường hợp này xảy ra, bạn có thể truy xuất thông tin cập nhật vị trí thường xuyên hơn bằng cách thực hiện một trong các thao tác sau:
- Đưa ứng dụng của bạn lên nền trước.
-
Bắt đầu một dịch vụ trên nền trước trong ứng dụng bằng cách gọi startForegroundService()
. Khi một dịch vụ trên nền trước như vậy đang hoạt động, dịch vụ đó sẽ xuất hiện dưới dạng thông báo đang diễn ra trong khu vực thông báo.
Thận trọng: Nếu ứng dụng của bạn khởi động một dịch vụ trên nền trước trong khi chạy ở chế độ nền trên một thiết bị chạy Android 11 (API cấp 30) trở lên, thì ứng dụng của bạn không thể truy cập thông tin vị trí trừ phi người dùng đã cấp quyền ACCESS_BACKGROUND_LOCATION
cho ứng dụng. Để biết thêm thông tin, hãy xem hướng dẫn về các hạn chế khi đang sử dụng liên quan đến các dịch vụ trên nền trước.
-
Sử dụng các phần tử của API khoanh vùng địa lý, chẳng hạn như
GeofencingClient
, được tối ưu hoá để giảm thiểu mức sử dụng pin.
-
Sử dụng trình nghe vị trí thụ động. Trình nghe này có thể nhận thông tin cập nhật vị trí nhanh hơn nếu có ứng dụng trên nền trước yêu cầu thông tin cập nhật vị trí với tốc độ nhanh hơn.
Lưu ý: Nếu ứng dụng của bạn cần quyền truy cập vào nhật ký vị trí chứa các bản cập nhật thường xuyên theo thời gian, hãy sử dụng phiên bản theo lô của các phần tử API Trình cung cấp vị trí kết hợp, chẳng hạn như giao diện FusedLocationProviderApi
. Khi ứng dụng của bạn đang chạy ở chế độ nền, API này sẽ nhận được vị trí của người dùng thường xuyên hơn so với API không theo lô. Tuy nhiên, xin lưu ý rằng ứng dụng của bạn vẫn chỉ nhận được thông tin cập nhật theo lô vài lần mỗi giờ.
API bị ảnh hưởng
Những thay đổi đối với hành vi truy xuất vị trí trong các ứng dụng chạy ở chế độ nền ảnh hưởng đến các API sau:
- Trình cung cấp vị trí kết hợp (FLP)
-
-
Nếu ứng dụng của bạn đang chạy ở chế độ nền, thì dịch vụ hệ thống vị trí chỉ tính toán vị trí mới cho ứng dụng của bạn vài lần mỗi giờ. Điều này xảy ra ngay cả khi ứng dụng của bạn yêu cầu cập nhật vị trí thường xuyên hơn.
Tuy nhiên, bằng cách sử dụng
phiên bản theo lô của FLP, bạn có thể truy cập vào nhật ký vị trí thường xuyên hơn sau khi ứng dụng của bạn nhận được bản cập nhật theo lô. Bản cập nhật này cũng chỉ xảy ra vài lần mỗi giờ.
- Nếu ứng dụng của bạn đang chạy ở nền trước, thì tốc độ lấy mẫu vị trí sẽ không thay đổi so với Android 7.1.1 (API cấp 25).
- Khoanh vùng địa lý
-
- Các ứng dụng chạy nền có thể nhận được các sự kiện chuyển đổi khoanh vùng địa lý thường xuyên hơn so với thông tin cập nhật từ Nhà cung cấp vị trí kết hợp.
- Tốc độ phản hồi trung bình của một sự kiện khoanh vùng địa lý là vài phút một lần.
- Thông tin đo lường GNSS và thông báo điều hướng GNSS
-
- Trình quản lý vị trí
-
-
Thông tin cập nhật vị trí chỉ được cung cấp cho các ứng dụng chạy ở chế độ nền vài lần mỗi giờ.
Lưu ý: Nếu ứng dụng của bạn đang chạy trên một thiết bị đã cài đặt Dịch vụ Google Play, bạn nên sử dụng Trình cung cấp vị trí kết hợp (FLP).
- Trình quản lý Wi-Fi
-
Phương thức
startScan()
chỉ quét toàn bộ ứng dụng chạy ở chế độ nền vài lần mỗi giờ. Nếu một ứng dụng chạy nền gọi lại phương thức ngay sau đó, thì lớp WifiManager
sẽ cung cấp kết quả được lưu vào bộ nhớ đệm từ lần quét trước.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Background Location Limits\n\nIn an effort to reduce power consumption, Android 8.0 (API level 26) limits\nhow frequently an app can retrieve the user's current location while the app is\n[running in the background](/guide/background). Under these\nconditions, apps can receive location updates only a few times each hour.\n\n**Note:** These limitations apply to all apps used on devices\nrunning Android 8.0 (API level 26) or higher, **regardless of an app's\ntarget SDK version**.\n\nThis location retrieval behavior is particularly\nimportant to keep in mind if your app relies on real-time alerts or motion\ndetection while running in the background.\n\nForeground app behavior is preserved\n------------------------------------\n\n\nIf an app is in the foreground on a device running Android 8.0 (API level 26),\nthe location update behavior is the same as on Android 7.1.1 (API level\n25) and lower.\n\n**Warning:** If your app retrieves near real-time location\nupdates over a long period of time, the device's battery life becomes\nsignificantly shorter.\n\nTuning your app's location behavior\n-----------------------------------\n\nConsider whether your app's use cases for running in the background cannot\nsucceed at all if your app receives infrequent location updates. If this is the\ncase, you can retrieve location updates more frequently by performing one of the\nfollowing actions:\n\n- Bring your app to the foreground.\n- Start a [foreground\n service](/guide/components/foreground-services) in your app by calling\n [startForegroundService()](/reference/android/content/Context#startForegroundService(android.content.Intent)). When such a foreground service is active, it\n appears as an ongoing notification in the\n [notification\n area](/guide/topics/ui/notifiers/notifications).\n\n **Caution:** If your app starts a foreground service\n while running in the background on a device that runs Android 11 (API\n level 30) or higher, your app cannot access location information unless the\n user has granted the\n [`ACCESS_BACKGROUND_LOCATION`](/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION)\n permission to your app. For more information, view the guidance about the\n [while-in-use\n restrictions](/guide/components/foreground-services#while-in-use-restrictions) that are associated with foreground services.\n- Use elements of the Geofencing API, such as the [`GeofencingClient`](https://developers.google.com/android/reference/com/google/android/gms/location/GeofencingClient), which are optimized for minimizing power use.\n- Use a passive location listener, which may receive faster location updates if there are foreground apps requesting location updates at a faster rate.\n\n**Note:** If your app needs access to location history that\ncontains time-frequent updates, use the batched version of the Fused Location\nProvider API elements, such as the\n[`FusedLocationProviderApi`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi)\ninterface. When your app is running in the background, this API receives the\nuser's location more frequently than the non-batched API. Keep in mind, however,\nthat your app still receives updates in batches only a few times each hour.\n\nAffected APIs\n-------------\n\n\nThe changes to location retrieval behavior in background apps affect the\nfollowing APIs:\n\n[Fused\nLocation Provider (FLP)](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi)\n:\n - If your app is running in the background, the location system service\n computes a new location for your app only a few times each hour. This\n is the case even when your app is requesting more frequent location\n updates.\n\n By using the\n [batched version](https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest#setMaxWaitTime(long)) of FLP, however, you have access to more\n time-frequent location history after your app receives a batch update,\n which also occurs only a few times each hour.\n - If your app is running in the foreground, there is no change in location sampling rates compared to Android 7.1.1 (API level 25).\n\nGeofencing\n:\n - Background apps can receive geofencing transition events more frequently than updates from the Fused Location Provider.\n - The average responsiveness for a geofencing event is every couple of minutes or so.\n\nGNSS Measurements and GNSS Navigation Messages\n:\n - When your app is in the background, callbacks that are registered to receive outputs from [GnssMeasurement](/reference/android/location/GnssMeasurement) and [GnssNavigationMessage](/reference/android/location/GnssNavigationMessage) stop executing.\n\nLocation Manager\n:\n - Location updates are provided to background apps only a few times\n each hour.\n\n\n **Note:** If your app is running on a device with\n Google Play services installed, it is highly recommended that you use\n the [Fused\n Location Provider (FLP)](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi) instead.\n\nWi-Fi Manager\n:\n The [startScan()](/reference/android/net/wifi/WifiManager#startScan()) method\n performs a full scan for background apps only a few times each hour. If a\n background app calls the method again soon afterward, the\n [WifiManager](/reference/android/net/wifi/WifiManager) class provides cached results from the\n previous scan."]]