Ограничения фонового местоположения
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Стремясь снизить энергопотребление, Android 8.0 (уровень API 26) ограничивает частоту, с которой приложение может получать текущее местоположение пользователя, когда приложение работает в фоновом режиме . В этих условиях приложения могут получать обновления местоположения только несколько раз в час.
Примечание. Эти ограничения применяются ко всем приложениям, используемым на устройствах под управлением Android 8.0 (уровень API 26) или выше, независимо от целевой версии SDK приложения .
Такое поведение определения местоположения особенно важно иметь в виду, если ваше приложение использует оповещения в реальном времени или обнаружение движения во время работы в фоновом режиме.
Поведение приложения переднего плана сохраняется.
Если приложение находится на переднем плане на устройстве под управлением Android 8.0 (уровень API 26), поведение обновления местоположения такое же, как на Android 7.1.1 (уровень API 25) и ниже.
Предупреждение. Если ваше приложение получает обновления о местоположении практически в реальном времени в течение длительного периода времени, срок службы батареи устройства значительно сокращается.
Настройка поведения местоположения вашего приложения
Подумайте, не могут ли варианты использования вашего приложения для работы в фоновом режиме вообще оказаться успешными, если ваше приложение получает нечастые обновления местоположения. В этом случае вы можете получать обновления местоположения чаще, выполнив одно из следующих действий:
- Выведите свое приложение на передний план.
Запустите службу переднего плана в своем приложении, вызвав startForegroundService()
. Когда такая служба переднего плана активна, она отображается в виде текущего уведомления в области уведомлений .
Внимание: если ваше приложение запускает службу переднего плана во время работы в фоновом режиме на устройстве под управлением Android 11 (уровень API 30) или выше, ваше приложение не сможет получить доступ к информации о местоположении, если пользователь не предоставил разрешение ACCESS_BACKGROUND_LOCATION
вашему приложению. Дополнительные сведения см. в руководстве по ограничениям на использование , связанным с приоритетными службами.
- Используйте элементы API Geofencing, такие как
GeofencingClient
, которые оптимизированы для минимизации энергопотребления. - Используйте пассивный прослушиватель местоположения, который может получать обновления местоположения быстрее, если есть приложения на переднем плане, запрашивающие обновления местоположения с большей скоростью.
Примечание. Если вашему приложению требуется доступ к истории местоположений, содержащей частые обновления, используйте пакетную версию элементов API Fused Location Provider, например интерфейс FusedLocationProviderApi
. Когда ваше приложение работает в фоновом режиме, этот API получает данные о местоположении пользователя чаще, чем непакетный API. Однако имейте в виду, что ваше приложение по-прежнему получает обновления пакетами всего несколько раз в час.
Затронутые API
Изменения в поведении определения местоположения в фоновых приложениях влияют на следующие API:
- Поставщик объединенного местоположения (FLP)
Если ваше приложение работает в фоновом режиме, служба системы определения местоположения вычисляет новое местоположение для вашего приложения только несколько раз в час. Это происходит даже тогда, когда ваше приложение запрашивает более частые обновления местоположения.
Однако, используя пакетную версию FLP, вы получаете доступ к более частой истории местоположений после того, как ваше приложение получает пакетное обновление, которое также происходит только несколько раз в час.
- Если ваше приложение работает на переднем плане, частота выборки местоположения не изменится по сравнению с Android 7.1.1 (уровень API 25).
- Геофенсинг
- Фоновые приложения могут получать события перехода к геозонам чаще, чем обновления от поставщика Fused Location.
- Среднее время отклика на событие геозоны — примерно каждые пару минут.
- Измерения GNSS и навигационные сообщения GNSS
- Когда ваше приложение находится в фоновом режиме, обратные вызовы, зарегистрированные для получения выходных данных от
GnssMeasurement
и GnssNavigationMessage
перестают выполняться.
- Менеджер местоположения
Обновления местоположения предоставляются фоновым приложениям только несколько раз в час.
Примечание. Если ваше приложение работает на устройстве с установленными службами Google Play, настоятельно рекомендуется вместо этого использовать Fused Location Provider (FLP) .
- Менеджер Wi-Fi
- Метод
startScan()
выполняет полную проверку фоновых приложений всего несколько раз в час. Если вскоре после этого фоновое приложение снова вызывает этот метод, класс WifiManager
предоставляет кэшированные результаты предыдущего сканирования.
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 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."]]