page.title=Изменения в работе page.keywords=preview,sdk,compatibility meta.tags="предварительная версия", "совместимость" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body

Содержание документа

  1. Повышение производительности
    1. Режим Doze
    2. Оптимизация фоновых процессов
  2. Изменения разрешений
  3. Улучшенные специальные возможности
    1. Масштабирование экрана
    2. Vision Settings в мастере настройки
  4. Связь приложений NDK с библиотеками платформы
  5. Android for Work

Дополнительно

  1. Обзор API-интерфейсов Android N

Наряду с новыми функциями и возможностями в Android N появились различные изменения работы системы и API. В этом документе рассматриваются некоторые наиболее важные изменения, которые следует понимать и учитывать при разработке приложений.

Если вы ранее публиковали приложения для Android, то примите во внимание, что эти изменения в платформе могут повлиять на работу ваших уже опубликованных приложений.

Повышение производительности

Изменения в работе системы Android N нацелены на более экономное использование заряда аккумулятора и оперативной памяти, а также на повышение производительности приложений. Эти изменения могут повлиять на системные уведомления и доступность системных ресурсов для вашего приложения. Вам следует ознакомиться с этими изменениями и оценить, какие исправления могут понадобиться вашему приложению для соответствия этим изменениям.

Режим Doze

Появившийся в Android 6.0 (уровень API 23), режим Doze экономит заряд аккумулятора, откладывая процессорные и сетевые операции, когда устройство находится не на зарядке, оно неподвижно, и его экран погашен. Android N расширяет возможности режима Doze, применяя частичный набор процессорных и сетевых ограничений в тех случаях, когда устройство находится не на зарядке, с погашенным экраном, но не обязательно неподвижно, например, когда оно находится в кармане пользователя.

Рис. 1. Иллюстрация применения первого уровня ограничений активности системы в режиме Doze для экономии заряда аккумулятора.

Когда устройство питается от аккумулятора и его экран отключен в течение некоторого промежутка времени, устройство переходит в режим Doze и применяет первый частичный набор ограничений: закрывается доступ приложений к сети, откладывается выполнение заданий и синхронизации. Если устройство остается неподвижным в течение определенного времени после перехода в режим Doze, система применяет остальные ограничения Doze для {@link android.os.PowerManager.WakeLock}, оповещений {@link android.app.AlarmManager}, сканирования GPS и Wi-Fi. Независимо от того, были применены все или только некоторые ограничения режима Doze, устройство периодически пробуждается на короткий промежуток времени, в течение которого приложениям разрешается сетевой доступ и выполнение отложенных заданий или синхронизации.

Рис. 2. Иллюстрация применения второго уровня ограничений активности системы в режиме Doze после того, как устройство неподвижно в течение определенного времени.

Следует отметить, что включение экрана или подключение к источнику питания приводит к выходу устройства из режима Doze и снимает эти ограничения обработки. Эти дополнительные особенности поведения не влияют на советы и рекомендации по адаптации приложений к предыдущей версии режима Doze из Android 6.0 (уровень API 23), которые были рассмотрены в документе Оптимизация для режима Doze и режима ожидания для приложений. Вы должны следовать этим рекомендациям (например, использовать Google Cloud Messaging (GCM) для отправки и получения сообщений) и приступить к планированию обновлений для соответствия дополнительному поведению режима Doze.

Проект Svelte: оптимизация фоновых процессов

В Android N удалены три неявных широковещательной рассылки с целью оптимизации потребления памяти и энергии. Причиной этого изменения стало то, что неявные широковещательные рассылки часто запускали приложения, которые прослушивали их в фоновом режиме. Удаление этих рассылок может существенно улучшить производительность устройства и работу интерфейса пользователя.

На мобильных устройствах часто могут происходить изменения подключения, например, при переключении между Wi-Fi и мобильным трафиком. Сейчас приложения могут следить за изменениями подключения, зарегистрировавшись в качестве получателя для неявных широковещательных рассылок {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} в своем манифесте. Поскольку для получения этих рассылок регистрируются многие приложения, каждое переключение сети может вызвать их активацию и одновременную обработку рассылки.

Подобным образом приложения могут регистрироваться для получения неявных широковещательных рассылок {@link android.hardware.Camera#ACTION_NEW_PICTURE} и {@link android.hardware.Camera#ACTION_NEW_VIDEO} от других приложений, например от камеры. Когда пользователь делает снимок с помощью приложения камеры, эти приложения активируются для обработки широковещательной рассылки.

Для устранения этих проблем Android N применяет следующие способы оптимизации.

В будущих выпусках Android могут быть отменены другие неявные широковещательные рассылки, а также отменена привязка некоторых фоновых служб. Поэтому следует избегать зависимостей (или удалить их) в виде объявленных в манифесте получателей неявных широковещательных рассылок или фоновых служб.

Платформа Android предоставляет несколько решений, позволяющих отказаться от таких неявных широковещательных рассылок или фоновых служб. Например, в API {@link android.app.job.JobScheduler} реализован надежный механизм планирования сетевых операций, который запускается при выполнении определенных условий, например при подключении к безлимитной сети. Вы можете даже использовать {@link android.app.job.JobScheduler}, чтобы реагировать на изменения поставщиков контента.

Дополнительная информация об этом изменении в работе системы и соответствующей адаптации приложений содержится в документе Оптимизация фоновых процессов.

Изменения разрешений

В Android N внесены изменения разрешений, которые могут повлиять на ваше приложение, включая разрешения учетных записей пользователей и новое разрешение на запись во внешнем хранилище. Ниже приводится краткое описание разрешений, измененных в предварительной версии.

Улучшенные специальные возможности

В Android N внесены изменения, которые должны сделать платформу более удобной для пользователей со слабым или нарушенным зрением. Эти изменения в целом не требуют исправления кода вашего приложения, однако вам следует проверить их и протестировать на своем приложении, чтобы оценить их возможное влияние на интерфейс пользователя.

Масштабирование экрана

Android N позволяет пользователям установить параметр Display size, который увеличивает или уменьшает все элементы на экране, делая таким образом устройство более удобным для пользователей со слабым зрением. Пользователи не могут масштабировать экран до ширины менее sw320dp (ширина экрана Nexus 4, обычного телефона среднего размера).

Рис. 3. На экране справа показан эффект увеличения параметра Display size на устройстве под управлением Android N.

При изменении плотности экрана устройства система уведомляет запущенные приложения следующим способами.

Большинству приложений не требуются какие-либо изменения для поддержки этой возможности при условии, что эти приложения соответствуют рекомендациям по разработке для Android. Необходимо проверить следующие моменты.

Vision Settings в мастере настройки

В Android N появились настройки Vision Settings на экране приветствия, где пользователи могут установить следующие параметры специальных возможностей на новом устройстве: Magnification gesture, Font size, Display size и TalkBack. В результате этого изменения становятся более заметными ошибки, связанные с различными настройками экрана. Чтобы оценить влияние этой функции, следует протестировать свое приложение, включив эти настройки на экране Settings > Accessibility.

Связь приложений NDK с библиотеками платформы

В Android N внесены изменения пространства имен, предотвращающие загрузку закрытых API-интерфейсов. Если вы используете NDK, то вы должны использовать только открытые API-интерфейсы платформы Android. Использование закрытых API в следующем официальном выпуске Android может привести к ошибке и завершению работы приложения.

Чтобы предупредить вас об использовании закрытых API, приложения, запущенные на устройстве с Android N, создают сообщение об ошибке в журнале устройства (logcat) при вызове закрытого API. Эта ошибка также отображается на экране устройства в виде сообщения, информирующего о ситуации. Вам следует проверить код приложения, отказаться от применения закрытых API и тщательно протестировать приложение на тестовом устройстве или эмуляторе.

Если ваше приложение зависит от библиотек платформы, ознакомьтесь в документации NDK со стандартными способами замены общих закрытых API их открытыми эквивалентами. Вы можете ссылаться на библиотеки платформы, не замечая этого, особенно если ваше приложение использует библиотеку, которая является частью платформы (например, libpng), но не входит в состав NDK. В этом случае убедитесь, что ваш пакет APK содержит все файлы .so, на которые вы намеревались ссылаться.

Внимание! Некоторые сторонние библиотеки могут ссылаться на закрытые API. Приложение, использующее такие библиотеки, может завершиться с ошибкой при запуске в следующем официальном выпуске Android.

Приложения не должны зависеть от библиотек платформы (или использовать их), которые не входят в состав NDK, поскольку эти библиотеки могут изменяться или отсутствовать в разных выпусках Android. Примером такого изменения может служить переход от OpenSSL к BoringSSL. Разные устройства также могут обладать разными уровнями совместимости, поскольку для библиотек платформы, не включенных в NDK, отсутствуют требования к совместимости. Если вам необходимо обратиться к библиотекам не из состава NDK на более старых устройствах, эту загрузку следует сделать зависимой от уровня Android API.

Для помощи в диагностике проблем подобного рода ниже приведены несколько примеров ошибок Java и NDK, с которым вы можете столкнуться при создании приложения для Android N.

Пример ошибки Java:

java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
    is not accessible for the namespace "classloader-namespace"

Пример ошибки NDK:

dlopen failed: cannot locate symbol "__system_property_get" referenced by ...

Ниже приведены некоторые стандартные способы устранения подобных ошибок в приложениях.

Android for Work

Android N содержит изменения для приложений, предназначенных для Android for Work, включая изменения установки сертификата, сброса пароля, управления вторичным пользователем, и доступа к идентификаторам устройства. Если вы создаете приложение для среды Android for Work, вам следует ознакомиться с этими изменениями и откорректировать приложение соответствующим образом.

Дополнительная информация об изменениях Android for Work в Android N содержится в документе Обновления Android for Work.

Другие важные моменты