SlideShare uma empresa Scribd logo
1 de 65
Что нового в
Android O
Каналы уведомлений
Каналы уведомлений
NotificationChannel channel = new NotificationChannel(
PRIMARY_CHANNEL,
getString(R.string.noti_channel_default),
NotificationManager.IMPORTANCE_DEFAULT);
channel.setLightColor(Color.GREEN);
channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
mNotificationManager.createNotificationChannel(channel);
Каналы уведомлений
NotificationChannel channel = new NotificationChannel(
PRIMARY_CHANNEL,
getString(R.string.noti_channel_default),
NotificationManager.IMPORTANCE_DEFAULT);
channel.setLightColor(Color.GREEN);
channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
mNotificationManager.createNotificationChannel(channel);
new Notification.Builder(context, PRIMARY_CHANNEL)
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(getSmallIcon())
.setAutoCancel(true)
Каналы уведомлений
CharSequence name = getString(R.string.noti_channel_group_default);
NotificationChannelGroup group =
new NotificationChannelGroup(DEFAULT_CHANNELS_GROUP_ID, name);
mNotificationManager.createNotificationChannelGroup(group);
Каналы уведомлений
CharSequence name = getString(R.string.noti_channel_group_default);
NotificationChannelGroup group =
new NotificationChannelGroup(DEFAULT_CHANNELS_GROUP_ID, name);
mNotificationManager.createNotificationChannelGroup(group);
NotificationChannel channel = new NotificationChannel(
PRIMARY_CHANNEL,
getString(R.string.noti_channel_default),
NotificationManager.IMPORTANCE_DEFAULT);
channel.setGroup(DEFAULT_CHANNELS_GROUP_ID);
mNotificationManager.createNotificationChannel(channel);
Title with black text on black is background is bug of Android O Preview 1
Свойства каналов
• Приоритет
• Звук
• Управление светодиодом
• Вибрация
• Отображение на заблокированном экране
• Badge в Launcher
Изменения в Notifications API
• Канал обязателен для все Notification
• Приоритет Notification не дает эффекта,
используйте приоритеты каналов.
• NotificationListenerService теперь может
понимать кем было удалено уведомление:
пользователем или приложением, с помощью
нового метода onNotificationRemoved()
Изменения в Notification.Builder API
• Notification.Builder(Context)

Используйте Notification.Builder(Context, String)
• setTimeout()

Задает время после которого уведомление будет удалено
• setColorized()

Разукрашивать ли фон уведомления в цвет, который задан с
помощью метода setColor()
• chooseBadgeIcon()

Тип иконки, который будет использовать как badge для
уведомления
• setShortcutId()

Launcher может спрятать Shortcut, который дублирует уведомления.
Работает только в случае если Launcher поддерживает Shortcut
Ограничения Service
Ограничения Service
Foreground Processes
Visible Processes
Service Processes
Background Processes
Empty Processes
Ограничения Service
Foreground Processes
Visible Processes
Service Processes

(several minutes)
Background Processes
Empty Processes
Ограничение фоновых задач
• Не применяются для Foreground приложения
• Не применяются для Bounded Service-ов
• Система добавляет фоновые приложения во
временный белый список на несколько минут в
случае если:
• Обработка high-priority FCM push
• Получение broadcast
• Выполнение PendingIntent
• Применяется только для приложения с
targetSdk=O
Foreground Apps
• Есть видимая Activity (started or paused)
• Есть foreground Service
• Другое foreground приложение связано с
приложение

Service приложения используется через Binding или
используется ContentProvider приложения
Ограничения Broadcast
<receiver android:name=".SampleReceiver">
<intent-filter>
<action
android:name=“android.intent.action.PACKAGE_ADDED”
/>
</intent-filter>
</receiver>Не работает
в Android O
Ограничения Broadcast
Ограничения Broadcast
• Приложения больше не могут регистрировать
Broadcast Receivers для неявных Broadcast в
Манифесте приложения
• Для явных Broadcast это не применяется
• Регистрация на Broadcast во время работы
приложения с помощью Context.registerReceiver()
работает без изменений
• Ограничения применяются только к приложения с
targetSdk=O
• Некоторые неявные Broadcast все также можно
регистрировать
Исключения
• ACTION_LOCALE_CHANGED
• ACTION_HEADSET_PLUG
• ACTION_CONNECTION_STATE_CHANGED

For BluetoothHeadset
• ACTION_NEW_OUTGOING_CALL
• ACTION_PACKAGE_FULLY_REMOVED
• ACTION_DEVICE_STORAGE_LOW
*Этот список может измениться до финального релиза SDK
ЧТО ДЕЛАТЬ ???
JobScheduler
JobScheduler
• Условия сети
• Состояние зарядки
• Находится ли устройство в простое (Idle state)
• Время выполнения
• Периодичность выполнения
• Крайний срок выполнения
• Политику повтора выполнения при ошибке
• Сохранять ли работы между перезагрузками
• Может выполнять работы при изменение контента в
ContentProvider
• Работает в ограничениях Doze Mode и App Standby
Другие ограничения фоновых операций
• Система убирает все Wakelock когда приложение
переходит в кэшированное состояние (нет активных
компонентов)
• Приложение в фоне получается обновление
местоположения только несколько раз в час

* Может быть изменено в следующих DP
• Service.startForeground() больше не работает.
Используйте NotificationManager.startServiceInForeground()

Применяется только для приложений с targetSdk=O
• Context.startService() теперь бросает исключение
IllegalStateExceptions, если приложение попытается
использовать этот метод в случае когда Service
становится restricted
Ресурсы шрифтов
Ресурсы шрифтов
Семейства шрифтов
<?xml version="1.0" encoding="utf-8"?>
<font-family
xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font=“@font/lobster_regular"
/>
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font=“@font/lobster_italic"
/>
</font-family>
Задание шрифтов в TextView
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>
<style name=“TextAppearance.CustomFont”
parent="@android:style/TextAppearance.Small">
    <item name="android:fontFamily">@font/lobster</item>
</style>
Typeface typeface = getResources().getFont(R.font.lobster);
textView.setTypeface(typeface);
Адаптивные иконки
Адаптивные иконки
Новые правила для иконок в launcher
• Иконка, которая состоит из 2 слоев:
внутреннего и фонового слоев
• Оба слоя должны иметь размер 108 × 108 dp
• Внутренний слой иконки должен
отрисовываться в зоне 72 × 72 dp
• Зона вокруг иконки в 36 dp в каждой стороне
зарезервирована для визуальных эффектов
Визуальные эффекты
Пример
<maskable-icon>
    <background android:drawable="@color/ic_background"/>
    <foreground android:drawable="@mipmap/ic_foreground"/>
</maskable-icon>
Autosizing TextView
Autosizing TextView
• Granularity

Выбираем наилучший размер текста на основе доступного
места в интервале между минимальным и максимальным
размером, и размер шага
• Preset Sizes

Выбирается наилучший размер из списка заданных
Granularity Autosizing
<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:autoSizeText="uniform"
  android:autoSizeMinTextSize="12sp"
  android:autoSizeMaxTextSize="100sp"
  android:autoSizeStepGranularity="2sp"
/>
Preset Sizes Autosizing
<resources>
    <array name="autosize_text_sizes">
        <item>10sp</item>
        <item>12sp</item>
        <item>20sp</item>
        <item>40sp</item>
        <item>100sp</item>
    </array>
</resources>
<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:autoSizeText="uniform"
  android:autoSizePresetSizes=
"@array/autosize_text_sizes"
/>
Обновления Java API
Java 8 DateTime
• Отдельный классы для даты и времени
• Классы для представления периодов (Period) и
интервалов (Duration)
• Немодифицируемые
• Потокобезопасные
*Можно использовать backport Java 8 DateTime - ThreeTenAbp
Java 7/8 NIO API
• Path
• Stream API для файлов
• Работа с информацией о файовой системе
• WatchService
Другие обновления Java API
• java.lang.invoke

Поддержка динамических языков, предоставляемая
напрямую core Java классами и виртуальной машиной
• java.util.Collections
• Collections.sort() реализован на основе List.sort()

Оптимизация скорости Collections.sort().

Не используйте Collections.sort() из List.sort()
• Добавлены checked, empty, synchronised и
unmodifiable методы-обертки для NavigableMap и
NavigableSet
Обновления Android SDK
Fragment
• Действия на выполнение транзакции Fragment

FragmentTransaction.postOnCommit(Runnable)
• Fragment lifecycle callback
• Главный (Primary) Fragment
• Оптимизации для транзакций Fragment-ов
Permissions
• Все разрешения должны запрашиваться явным
образом

Когда пользователь предоставляет разрешение приложения,
остальные разрешения в этой группе не предоставляются
автоматически. Их надо запрашивать явным образом, но они
будут предоставлены автоматом.
• android.permission.ANSWER_PHONE_CALLS

Allows apps to answer incoming phone calls

Позволяет приложения отвечать на входящие звонки

Относится к dangerous

Является частью группы PHONE
RecoverableSecurityException
• Содержит локализованное сообщение об
ошибке, которое можно показать пользователю
• Метод для показа сообщения диалогом
• Метод для пока сообщения в виде системного
уведомления
• Предоставляет RemoteAction, который
позволяет запустить процесс восстановления
из любого процесса, напрямую в ваш UI
Cached data
• StorageManager.getCacheQuotaBytes()

Объем памяти доступный для кэшированных данных приложения
• Новая механизм очистки кэша в системе:
• StorageManager.setCacheBehaviorAtomic()

Все файлы в папке удаляются вместе
• StorageManager.setCacheBehaviorTombstone()

Файлы не удалются, но они становятся пустыми
• Выделение дискового пространства для файлов с помощью
StorageManager.allocateBytes()

Автоматически выделит необходимое количество дискового пространства, очистив
кэш если это необходимо
• Используйте StorageManager.getAllocatableBytes() вместо
File.getUsableSpace() для проверки того что на устройстве
достаточно места для хранения новых данных

Будет проверено доступное свободное место, и кэш который система сможет
очистить для вашего приложения
Content Provider
• Новый метод запроса с параметрами выборки &
сортировки в виде Bundle
• Принудительно обновление данных по
заданному URI

refresh(Uri, Bundle, CancelationSignal)
• Пагинация запросов
Content Provider
// Создаем Bundle с параметрами запроса
Bundle queryArgs = new Bundle(4);
queryArgs.putString(
ContentResolver.QUERY_ARG_SQL_SELECTION, …);
queryArgs.putStringArrayList(
ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS, …);
queryArgs.putInt(ContentResolver.QUERY_ARG_OFFSET, 0);
queryArgs.putInt(ContentResolver.QUERY_ARG_LIMIT, 100);
Uri contentUri = …;
context.getContentResolver().query(contentUri, queryArgs, null);
Content Provider
• Новый метод запроса с параметрами выборки &
сортировки в виде Bundle
• Принудительно обновление данных по
заданному URI

refresh(Uri, Bundle, CancelationSignal)
• Пагинация запросов
• Изменение данных в статистике использования
контактов для всех приложений

Запросы о использование данных теперь возвращают
примерные данные, вместо точных для TIMES_CONTACTED,
TIMES_USED, LAST_TIME_CONTACTED, LAST_TIME_USED
Поддержка нескольких дисплеев
• Улучшенная поддержка нескольких дисплеев
• Можно перемещать Activity между дисплеями
• Когда Activity перемещается между дисплеями,
система изменяет размер Activity и оповещает
об изменение конфигурации, если это
необходимо,
• ActivityOptions содержит новые методы для
управления дисплеем на котором запускается
Activity
WebView APIs
• Multiprocess WebView

Содержимое WebView обрабатывается в отдельном процессе,
изолированном от процесса приложения
• Version API

Позволяет получать информацию о приложение, отображающем web
контент в вашем приложение
• Google SafeBrowsing API

Проверка URL, использую Google Safe Browsing
• Termination Handle API

Обработка ситуации, когда система убивает процесс, в котором
происходит рендеринг содержимого WebView
• Renderer Importance API

Позволяет задавать приоритет рендеринга. Необходимо использовать в
связке с Termination Handle API
Strict mode
• ThreadPolicy.Builder.detectUnbufferedIo()

Определяет когда приложение использу IO без буферизации
• VmPolicy.Builder.detectContentUriWithoutPermission()

Определяет когда приложения не предоставляет разрешения
стороннему приложения, когда запуска Activity вне вашего
приложения
• VmPolicy.Builder.detectUntaggedSockets()

Определяет когда ваше приложения использует сетевые.
операции без использования TrafficStats.setThreadStateTag()
для пометки сетевого трафика с целью его отладки
Категоризация приложений
• Используется для объединения приложений с
одинаковыми целями при отображение их
пользователю, например в мониторе
использования данных или расхода батареи
• Необходимо задать атрибут android:appCategory
в тэге <application> манифеста вашего
приложения
Категоризация приложений
• audio
• game
• image
• maps
• news
• productivity
• social
• video
AccountManager API
• Управление видимостью аккаунтов для других
приложений
• Теперь можно слушать изменения аккаунтов только
для заданных типов аккаунтов
• Теперь приложение может получить доступ к
аккаунтам, только если аутентикатор создал этот
аккаунт, либо пользователь дал доступ приложению 

Разрешение GET_ACCOUNTS больше недостаточно. Необходимо
использовать AccountManager.newChooseAccountIntent() для
получения доступа
• LOGIN_ACCOUNTS_CHANGED_ACTIONS

Используйте AccountManager.addOnAccountsUpdatedListener() во
время работы приложения
Smart sharing
Intent intent = new Intent(Intent.ACTION_CHOOSER);
ArrayList<String> annotations = new ArrayList<>(3);
annotations.add("person");
annotations.add("selfie");
annotations.add("child");
intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS, annotations);
Изменения Alert Windows
Приложения которые используют разрешение
SYSTEM_ALERT_WINDOW и используют один из
перечисленных типов Alert Window:
• TYPE_PHONE
• TYPE_PRIORITY_PHONE
• TYPE_SYSTEM_ALERT
• TYPE_SYSTEM_OVERLAY
• TYPE_SYSTEM_ERROR
Изменения Alert Windows
• Приложения больше не могут больше
использовать перечисленные типы окон

Используйте новый тип окон - TYPE_APPLICATION_OVERLAY
• Окна с указанными типами будут показаны под
окном с типом TYPE_APPLICATION_OVERLAY
• Изменения касаются только приложений с
targetSdk=O
Другие обновления
• Возвращаемый тип в View.findViewById() и
View.findViewByTag() теперь типизированный

Больше не нужно привидений. Activity.findViewById() не
изменился (
• View Tooltip
Другие обновления
Другие обновления
• Возвращаемый тип в View.findViewById() и
View.findViewByTag() теперь типизированный
• View Tooltip
• AnimatorSet seeking и обратное воспроизведение
• Обновления Android ICU до версии 58
• Settings.Secure.ANDROID_ID уникальное для каждого
приложения и пользователя
• SSLv3 больше не поддерживается
• Приложения, которые устанавливают другие
приложения, должны получить доступ через систему
Другие обновления
• PreferenceManages.setDataStore(PreferenceDataStore)

Позволяет задать свое собственное хранилище для всех данных
в PreferenceManager. Альтернатива SharedPreference
• Build.SERIAL

Используйте Build.getSerial().

Необходимо разрешение READ_PHONE_STATE
• android.app.ProgressDialog
• Режим цвета в конфигурации устройства
• Обновление API Picture-In-Picture
• Улучшения в Storage Access Framework
Новые функции
• Autofill Framework
• Shortcuts & Widget Pinning
• Picture-in-Picture на всех платформах
• Управление цветом
• Wi-Fi Aware
• Companion device pairing
• Обновление Accessibility
• Улучшения медиа фреймворка
• LDAC
Program overview
DP1 - alpha
DP2 - beta (Google I/O 2017?)
DP3 - Final APIs & SDK, Play publishing

DP4 - pre-final images
Больше об Android O на

d.android.com/preview
Спасибо за
внимание!

Mais conteúdo relacionado

Mais procurados

Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoMoscowDjango
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяYuri Shmakov
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf Conference
 
Антон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияАнтон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияDaria Oreshkina
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSPUnguryan Vitaliy
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхKirill Zotin
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переигралEugene Zharkov
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverИлья Кожухов
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Pavel Novitsky
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.Igor Shkulipa
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​FDConf
 

Mais procurados (16)

Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоваться
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
 
введение в Laravel 5
введение в Laravel 5введение в Laravel 5
введение в Laravel 5
 
Антон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияАнтон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. Презентация
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталях
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)Meet Magento Belarus debug Pavel Novitsky (rus)
Meet Magento Belarus debug Pavel Novitsky (rus)
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
 

Semelhante a Что нового в Android O (Grodno HTP)

Google I/O 2016 для разработчиков
Google I/O 2016 для разработчиковGoogle I/O 2016 для разработчиков
Google I/O 2016 для разработчиковWOX APP
 
Что нового в Android 5.0
Что нового в Android 5.0Что нового в Android 5.0
Что нового в Android 5.0Kirill Danilov
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016РИФ-Воронеж
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Транслируем.бел
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Kuban Dzhakipov
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Платформа IQ Rain Bird. Как экономить воду?
Платформа IQ Rain Bird. Как экономить воду?Платформа IQ Rain Bird. Как экономить воду?
Платформа IQ Rain Bird. Как экономить воду?Газон Сервис Irrigation
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)GoSharp
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченкоsolit
 

Semelhante a Что нового в Android O (Grodno HTP) (20)

Google I/O 2016 для разработчиков
Google I/O 2016 для разработчиковGoogle I/O 2016 для разработчиков
Google I/O 2016 для разработчиков
 
Что нового в Android 5.0
Что нового в Android 5.0Что нового в Android 5.0
Что нового в Android 5.0
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
RoboGuice
RoboGuiceRoboGuice
RoboGuice
 
Основы доменной модели
Основы доменной моделиОсновы доменной модели
Основы доменной модели
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Платформа IQ Rain Bird. Как экономить воду?
Платформа IQ Rain Bird. Как экономить воду?Платформа IQ Rain Bird. Как экономить воду?
Платформа IQ Rain Bird. Как экономить воду?
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
 

Mais de Kirill Rozov

Kotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is comingKotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is comingKirill Rozov
 
2 years without Java. Kotlin only
2 years without Java. Kotlin only2 years without Java. Kotlin only
2 years without Java. Kotlin onlyKirill Rozov
 
Почему Kotlin?
Почему Kotlin?Почему Kotlin?
Почему Kotlin?Kirill Rozov
 
KOIN for dependency Injection
KOIN for dependency InjectionKOIN for dependency Injection
KOIN for dependency InjectionKirill Rozov
 
ConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraintsConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraintsKirill Rozov
 
Kotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platformsKotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platformsKirill Rozov
 
Kotlin - следующий язык после Java
Kotlin - следующий язык после JavaKotlin - следующий язык после Java
Kotlin - следующий язык после JavaKirill Rozov
 
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3Kirill Rozov
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kirill Rozov
 
Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Kirill Rozov
 
Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2Kirill Rozov
 
What's new in Android O
What's new in Android OWhat's new in Android O
What's new in Android OKirill Rozov
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle IntroductionKirill Rozov
 
Kotlin для Android
Kotlin для AndroidKotlin для Android
Kotlin для AndroidKirill Rozov
 
What's new in Android M
What's new in Android MWhat's new in Android M
What's new in Android MKirill Rozov
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data BindingKirill Rozov
 

Mais de Kirill Rozov (20)

Kotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is comingKotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is coming
 
2 years without Java. Kotlin only
2 years without Java. Kotlin only2 years without Java. Kotlin only
2 years without Java. Kotlin only
 
Почему Kotlin?
Почему Kotlin?Почему Kotlin?
Почему Kotlin?
 
KOIN for dependency Injection
KOIN for dependency InjectionKOIN for dependency Injection
KOIN for dependency Injection
 
Optimize APK size
Optimize APK sizeOptimize APK size
Optimize APK size
 
ConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraintsConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraints
 
Kotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platformsKotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platforms
 
Kotlin - следующий язык после Java
Kotlin - следующий язык после JavaKotlin - следующий язык после Java
Kotlin - следующий язык после Java
 
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2
 
Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1
 
Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2
 
What's new in Android O
What's new in Android OWhat's new in Android O
What's new in Android O
 
Effective Java
Effective JavaEffective Java
Effective Java
 
Dagger 2
Dagger 2Dagger 2
Dagger 2
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
REST
RESTREST
REST
 
Kotlin для Android
Kotlin для AndroidKotlin для Android
Kotlin для Android
 
What's new in Android M
What's new in Android MWhat's new in Android M
What's new in Android M
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data Binding
 

Что нового в Android O (Grodno HTP)

  • 3. Каналы уведомлений NotificationChannel channel = new NotificationChannel( PRIMARY_CHANNEL, getString(R.string.noti_channel_default), NotificationManager.IMPORTANCE_DEFAULT); channel.setLightColor(Color.GREEN); channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); mNotificationManager.createNotificationChannel(channel);
  • 4. Каналы уведомлений NotificationChannel channel = new NotificationChannel( PRIMARY_CHANNEL, getString(R.string.noti_channel_default), NotificationManager.IMPORTANCE_DEFAULT); channel.setLightColor(Color.GREEN); channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); mNotificationManager.createNotificationChannel(channel); new Notification.Builder(context, PRIMARY_CHANNEL) .setContentTitle(title) .setContentText(body) .setSmallIcon(getSmallIcon()) .setAutoCancel(true)
  • 5. Каналы уведомлений CharSequence name = getString(R.string.noti_channel_group_default); NotificationChannelGroup group = new NotificationChannelGroup(DEFAULT_CHANNELS_GROUP_ID, name); mNotificationManager.createNotificationChannelGroup(group);
  • 6. Каналы уведомлений CharSequence name = getString(R.string.noti_channel_group_default); NotificationChannelGroup group = new NotificationChannelGroup(DEFAULT_CHANNELS_GROUP_ID, name); mNotificationManager.createNotificationChannelGroup(group); NotificationChannel channel = new NotificationChannel( PRIMARY_CHANNEL, getString(R.string.noti_channel_default), NotificationManager.IMPORTANCE_DEFAULT); channel.setGroup(DEFAULT_CHANNELS_GROUP_ID); mNotificationManager.createNotificationChannel(channel);
  • 7. Title with black text on black is background is bug of Android O Preview 1
  • 8. Свойства каналов • Приоритет • Звук • Управление светодиодом • Вибрация • Отображение на заблокированном экране • Badge в Launcher
  • 9. Изменения в Notifications API • Канал обязателен для все Notification • Приоритет Notification не дает эффекта, используйте приоритеты каналов. • NotificationListenerService теперь может понимать кем было удалено уведомление: пользователем или приложением, с помощью нового метода onNotificationRemoved()
  • 10. Изменения в Notification.Builder API • Notification.Builder(Context)
 Используйте Notification.Builder(Context, String) • setTimeout()
 Задает время после которого уведомление будет удалено • setColorized()
 Разукрашивать ли фон уведомления в цвет, который задан с помощью метода setColor() • chooseBadgeIcon()
 Тип иконки, который будет использовать как badge для уведомления • setShortcutId()
 Launcher может спрятать Shortcut, который дублирует уведомления. Работает только в случае если Launcher поддерживает Shortcut
  • 12. Ограничения Service Foreground Processes Visible Processes Service Processes Background Processes Empty Processes
  • 13. Ограничения Service Foreground Processes Visible Processes Service Processes
 (several minutes) Background Processes Empty Processes
  • 14. Ограничение фоновых задач • Не применяются для Foreground приложения • Не применяются для Bounded Service-ов • Система добавляет фоновые приложения во временный белый список на несколько минут в случае если: • Обработка high-priority FCM push • Получение broadcast • Выполнение PendingIntent • Применяется только для приложения с targetSdk=O
  • 15. Foreground Apps • Есть видимая Activity (started or paused) • Есть foreground Service • Другое foreground приложение связано с приложение
 Service приложения используется через Binding или используется ContentProvider приложения
  • 18. Ограничения Broadcast • Приложения больше не могут регистрировать Broadcast Receivers для неявных Broadcast в Манифесте приложения • Для явных Broadcast это не применяется • Регистрация на Broadcast во время работы приложения с помощью Context.registerReceiver() работает без изменений • Ограничения применяются только к приложения с targetSdk=O • Некоторые неявные Broadcast все также можно регистрировать
  • 19. Исключения • ACTION_LOCALE_CHANGED • ACTION_HEADSET_PLUG • ACTION_CONNECTION_STATE_CHANGED
 For BluetoothHeadset • ACTION_NEW_OUTGOING_CALL • ACTION_PACKAGE_FULLY_REMOVED • ACTION_DEVICE_STORAGE_LOW *Этот список может измениться до финального релиза SDK
  • 22. JobScheduler • Условия сети • Состояние зарядки • Находится ли устройство в простое (Idle state) • Время выполнения • Периодичность выполнения • Крайний срок выполнения • Политику повтора выполнения при ошибке • Сохранять ли работы между перезагрузками • Может выполнять работы при изменение контента в ContentProvider • Работает в ограничениях Doze Mode и App Standby
  • 23. Другие ограничения фоновых операций • Система убирает все Wakelock когда приложение переходит в кэшированное состояние (нет активных компонентов) • Приложение в фоне получается обновление местоположения только несколько раз в час
 * Может быть изменено в следующих DP • Service.startForeground() больше не работает. Используйте NotificationManager.startServiceInForeground()
 Применяется только для приложений с targetSdk=O • Context.startService() теперь бросает исключение IllegalStateExceptions, если приложение попытается использовать этот метод в случае когда Service становится restricted
  • 26. Семейства шрифтов <?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android">     <font         android:fontStyle="normal"         android:fontWeight="400"         android:font=“@font/lobster_regular" />     <font         android:fontStyle="italic"         android:fontWeight="400"         android:font=“@font/lobster_italic" /> </font-family>
  • 27. Задание шрифтов в TextView <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:fontFamily="@font/lobster"/> <style name=“TextAppearance.CustomFont” parent="@android:style/TextAppearance.Small">     <item name="android:fontFamily">@font/lobster</item> </style> Typeface typeface = getResources().getFont(R.font.lobster); textView.setTypeface(typeface);
  • 30. Новые правила для иконок в launcher • Иконка, которая состоит из 2 слоев: внутреннего и фонового слоев • Оба слоя должны иметь размер 108 × 108 dp • Внутренний слой иконки должен отрисовываться в зоне 72 × 72 dp • Зона вокруг иконки в 36 dp в каждой стороне зарезервирована для визуальных эффектов
  • 32. Пример <maskable-icon>     <background android:drawable="@color/ic_background"/>     <foreground android:drawable="@mipmap/ic_foreground"/> </maskable-icon>
  • 34. Autosizing TextView • Granularity
 Выбираем наилучший размер текста на основе доступного места в интервале между минимальным и максимальным размером, и размер шага • Preset Sizes
 Выбирается наилучший размер из списка заданных
  • 35. Granularity Autosizing <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:autoSizeText="uniform"   android:autoSizeMinTextSize="12sp"   android:autoSizeMaxTextSize="100sp"   android:autoSizeStepGranularity="2sp" />
  • 36. Preset Sizes Autosizing <resources>     <array name="autosize_text_sizes">         <item>10sp</item>         <item>12sp</item>         <item>20sp</item>         <item>40sp</item>         <item>100sp</item>     </array> </resources> <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:autoSizeText="uniform"   android:autoSizePresetSizes= "@array/autosize_text_sizes" />
  • 38. Java 8 DateTime • Отдельный классы для даты и времени • Классы для представления периодов (Period) и интервалов (Duration) • Немодифицируемые • Потокобезопасные *Можно использовать backport Java 8 DateTime - ThreeTenAbp
  • 39. Java 7/8 NIO API • Path • Stream API для файлов • Работа с информацией о файовой системе • WatchService
  • 40. Другие обновления Java API • java.lang.invoke
 Поддержка динамических языков, предоставляемая напрямую core Java классами и виртуальной машиной • java.util.Collections • Collections.sort() реализован на основе List.sort()
 Оптимизация скорости Collections.sort().
 Не используйте Collections.sort() из List.sort() • Добавлены checked, empty, synchronised и unmodifiable методы-обертки для NavigableMap и NavigableSet
  • 42. Fragment • Действия на выполнение транзакции Fragment
 FragmentTransaction.postOnCommit(Runnable) • Fragment lifecycle callback • Главный (Primary) Fragment • Оптимизации для транзакций Fragment-ов
  • 43. Permissions • Все разрешения должны запрашиваться явным образом
 Когда пользователь предоставляет разрешение приложения, остальные разрешения в этой группе не предоставляются автоматически. Их надо запрашивать явным образом, но они будут предоставлены автоматом. • android.permission.ANSWER_PHONE_CALLS
 Allows apps to answer incoming phone calls
 Позволяет приложения отвечать на входящие звонки
 Относится к dangerous
 Является частью группы PHONE
  • 44. RecoverableSecurityException • Содержит локализованное сообщение об ошибке, которое можно показать пользователю • Метод для показа сообщения диалогом • Метод для пока сообщения в виде системного уведомления • Предоставляет RemoteAction, который позволяет запустить процесс восстановления из любого процесса, напрямую в ваш UI
  • 45. Cached data • StorageManager.getCacheQuotaBytes()
 Объем памяти доступный для кэшированных данных приложения • Новая механизм очистки кэша в системе: • StorageManager.setCacheBehaviorAtomic()
 Все файлы в папке удаляются вместе • StorageManager.setCacheBehaviorTombstone()
 Файлы не удалются, но они становятся пустыми • Выделение дискового пространства для файлов с помощью StorageManager.allocateBytes()
 Автоматически выделит необходимое количество дискового пространства, очистив кэш если это необходимо • Используйте StorageManager.getAllocatableBytes() вместо File.getUsableSpace() для проверки того что на устройстве достаточно места для хранения новых данных
 Будет проверено доступное свободное место, и кэш который система сможет очистить для вашего приложения
  • 46. Content Provider • Новый метод запроса с параметрами выборки & сортировки в виде Bundle • Принудительно обновление данных по заданному URI
 refresh(Uri, Bundle, CancelationSignal) • Пагинация запросов
  • 47. Content Provider // Создаем Bundle с параметрами запроса Bundle queryArgs = new Bundle(4); queryArgs.putString( ContentResolver.QUERY_ARG_SQL_SELECTION, …); queryArgs.putStringArrayList( ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS, …); queryArgs.putInt(ContentResolver.QUERY_ARG_OFFSET, 0); queryArgs.putInt(ContentResolver.QUERY_ARG_LIMIT, 100); Uri contentUri = …; context.getContentResolver().query(contentUri, queryArgs, null);
  • 48. Content Provider • Новый метод запроса с параметрами выборки & сортировки в виде Bundle • Принудительно обновление данных по заданному URI
 refresh(Uri, Bundle, CancelationSignal) • Пагинация запросов • Изменение данных в статистике использования контактов для всех приложений
 Запросы о использование данных теперь возвращают примерные данные, вместо точных для TIMES_CONTACTED, TIMES_USED, LAST_TIME_CONTACTED, LAST_TIME_USED
  • 49. Поддержка нескольких дисплеев • Улучшенная поддержка нескольких дисплеев • Можно перемещать Activity между дисплеями • Когда Activity перемещается между дисплеями, система изменяет размер Activity и оповещает об изменение конфигурации, если это необходимо, • ActivityOptions содержит новые методы для управления дисплеем на котором запускается Activity
  • 50. WebView APIs • Multiprocess WebView
 Содержимое WebView обрабатывается в отдельном процессе, изолированном от процесса приложения • Version API
 Позволяет получать информацию о приложение, отображающем web контент в вашем приложение • Google SafeBrowsing API
 Проверка URL, использую Google Safe Browsing • Termination Handle API
 Обработка ситуации, когда система убивает процесс, в котором происходит рендеринг содержимого WebView • Renderer Importance API
 Позволяет задавать приоритет рендеринга. Необходимо использовать в связке с Termination Handle API
  • 51. Strict mode • ThreadPolicy.Builder.detectUnbufferedIo()
 Определяет когда приложение использу IO без буферизации • VmPolicy.Builder.detectContentUriWithoutPermission()
 Определяет когда приложения не предоставляет разрешения стороннему приложения, когда запуска Activity вне вашего приложения • VmPolicy.Builder.detectUntaggedSockets()
 Определяет когда ваше приложения использует сетевые. операции без использования TrafficStats.setThreadStateTag() для пометки сетевого трафика с целью его отладки
  • 52. Категоризация приложений • Используется для объединения приложений с одинаковыми целями при отображение их пользователю, например в мониторе использования данных или расхода батареи • Необходимо задать атрибут android:appCategory в тэге <application> манифеста вашего приложения
  • 53. Категоризация приложений • audio • game • image • maps • news • productivity • social • video
  • 54. AccountManager API • Управление видимостью аккаунтов для других приложений • Теперь можно слушать изменения аккаунтов только для заданных типов аккаунтов • Теперь приложение может получить доступ к аккаунтам, только если аутентикатор создал этот аккаунт, либо пользователь дал доступ приложению 
 Разрешение GET_ACCOUNTS больше недостаточно. Необходимо использовать AccountManager.newChooseAccountIntent() для получения доступа • LOGIN_ACCOUNTS_CHANGED_ACTIONS
 Используйте AccountManager.addOnAccountsUpdatedListener() во время работы приложения
  • 55. Smart sharing Intent intent = new Intent(Intent.ACTION_CHOOSER); ArrayList<String> annotations = new ArrayList<>(3); annotations.add("person"); annotations.add("selfie"); annotations.add("child"); intent.putStringArrayListExtra(     Intent.EXTRA_CONTENT_ANNOTATIONS, annotations);
  • 56. Изменения Alert Windows Приложения которые используют разрешение SYSTEM_ALERT_WINDOW и используют один из перечисленных типов Alert Window: • TYPE_PHONE • TYPE_PRIORITY_PHONE • TYPE_SYSTEM_ALERT • TYPE_SYSTEM_OVERLAY • TYPE_SYSTEM_ERROR
  • 57. Изменения Alert Windows • Приложения больше не могут больше использовать перечисленные типы окон
 Используйте новый тип окон - TYPE_APPLICATION_OVERLAY • Окна с указанными типами будут показаны под окном с типом TYPE_APPLICATION_OVERLAY • Изменения касаются только приложений с targetSdk=O
  • 58. Другие обновления • Возвращаемый тип в View.findViewById() и View.findViewByTag() теперь типизированный
 Больше не нужно привидений. Activity.findViewById() не изменился ( • View Tooltip
  • 60. Другие обновления • Возвращаемый тип в View.findViewById() и View.findViewByTag() теперь типизированный • View Tooltip • AnimatorSet seeking и обратное воспроизведение • Обновления Android ICU до версии 58 • Settings.Secure.ANDROID_ID уникальное для каждого приложения и пользователя • SSLv3 больше не поддерживается • Приложения, которые устанавливают другие приложения, должны получить доступ через систему
  • 61. Другие обновления • PreferenceManages.setDataStore(PreferenceDataStore)
 Позволяет задать свое собственное хранилище для всех данных в PreferenceManager. Альтернатива SharedPreference • Build.SERIAL
 Используйте Build.getSerial().
 Необходимо разрешение READ_PHONE_STATE • android.app.ProgressDialog • Режим цвета в конфигурации устройства • Обновление API Picture-In-Picture • Улучшения в Storage Access Framework
  • 62. Новые функции • Autofill Framework • Shortcuts & Widget Pinning • Picture-in-Picture на всех платформах • Управление цветом • Wi-Fi Aware • Companion device pairing • Обновление Accessibility • Улучшения медиа фреймворка • LDAC
  • 63. Program overview DP1 - alpha DP2 - beta (Google I/O 2017?) DP3 - Final APIs & SDK, Play publishing
 DP4 - pre-final images
  • 64. Больше об Android O на
 d.android.com/preview