5. Project Svelte - больше ограничений
API < 24 API ≥ 24
Manifest
API ≥ 24
Runtime
CONNECTIVITY_ACTION разрешен запрещен разрешен
ACTION_NEW_PICTURE
ACTION_NEW_VIDEO
запрещен запрещен запрещен
6. Экономим трафик пользователя
Data Saver Mode – ограничение фонового потока данных и не только.
ConnectivityManager.getRestrictBackgroundStatus():
RESTRICT_BACKGROUND_STATUS_DISABLED
RESTRICT_BACKGROUND_STATUS_ENABLED - нужно максимально снизить
использование данных сети. Фоновые запросы к сети могут быть
запрещены.
RESTRICT_BACKGROUND_STATUS_WHITELISTED
ConnectivityManager.isActiveNetworkMetered(): - ограничиваем использование
сети и в этом случае.
8. Для быстрой отрисовки графики
Поддержка Vulkan API
OpenGL™ ES 3.2 API
Улучшения SurfaceView
9. Multi-window
Все Activity, кроме той, с которой пользователь только что взаимодействовал
находятся в состоянии paused:
- не останавливайте воспроизведение по onPause()
android:resizeableActivity = "true" – меняет размер всех activity в стеке
resizeableActivity – для API ≥ 24 по-умолчанию true
- Fullscreen запрещен
- изменения атрибута screenOrientation игнорируются
11. Multi-window
Узнаем о многооконном режиме:
- isInMultiWindowMode()
- onMultiWindowModeChanged()
Не забываем про поддержку drag and drop!
12. Ответ в уведомлениях
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
.setLabel(“Ответить”)
.build();
Notification.Action.Builder(R.drawable.ic_reply_icon,
getString(R.string.label), replyPendingIntent)
.addRemoteInput(remoteInput)
Notification.Builder(mContext)
.addAction(action))
13. Отслеживание ответа в уведомлениях
Activity, определенная в PendingIntent ловит событие и обрабатывает его.
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
private CharSequence getMessageText(Intent intent) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
return remoteInput.getCharSequence(KEY_TEXT_REPLY);
}
Чтобы убрать прогресс в уведомлении, нужно удалить текущее уведомление
или обновить его.
14. Чат в уведомлениях
Notification notification = new Notification.Builder()
.setStyle(new Notification.MessagingStyle("Me")
.setConversationTitle("Team lunch")
.addMessage("Hi", timestamp1, null)
.addMessage("Not much", timestamp3, null)
.addMessage("How about lunch?", timestamp4, "Coworker"))
.build();
16. Quick Tile API
Для добавления своего значка быстрого доступа:
Создаем свой сервис наследник от TileService.
Можем запускать Runnable и отправлять Intent.
Можем менять иконку и текст.
Не можем раскрывать настройку на полный экран.
https://medium.com/@KieronQuinn/quick-settings-in-android-n-ea8ad8ce2eea
17. Шире возможности работы с телефоном
Добавлен черный список абонентов.
android.provider.BlockedNumberContract
Появилась возможность дефолтному приложению для звонков:
Сбрасывать входящие
Удалять звонок из истории
Скрывать уведомление о входящем звонке
android.telecom.CallScreeningService
18. Изменилась стратегия поиска подходящей строки:
Try fr_CH => Fail. Try fr => Fail. Try children of fr => fr_FR. Use fr_FR
Добавилась вторая дефолтная локаль пользователя
(LocaleList.getDefault()):
Try fr_CH => Fail. Try fr => Fail. Try children of fr => Fail.
Try it_CH => Fail. Try it => Fail. Try children of it => it_IT. Use it_IT
Улучшены форматтеры текста:
format(locale, "Choose a %d-digit PIN", 4)
Улучшения локализации
20. WebView
Если установлен Chrome - будет использоваться он вместо WebView.
Можно запустить в отдельном процессе.
Теперь контекст JavaScript будет сброшен при загрузке новой странице
Доступ к геолокации только при HTTPS соединении
Доступ к новым бетам WebView
21. Android TV
Запись телепередач вашего приложения через TV recording API.
Возможность показывать “картинку-в-картинке”.
22. Direct Boot
Чтобы приложение могло работать до первой разблокировки устройства, на
котором включено шифрование:
<receiver
android:directBootAware="true" >
<intent-filter>
<action android:name="android.intent.action.ACTION_LOCKED_BOOT_COMPLETED" />
appContext.createDeviceProtectedStorageContext() - для доступа к ресурсам, SP и БД
directBootContext.openFileInput(appDataFilename) - для доступа к файлам
Context.moveSharedPreferencesFrom() и Context.moveDatabaseFrom() - для миграции
25. Ближе к десктопам
Keyboard Shortcuts Helper для
отображения всех хоткеев приложения
Custom Pointer API для изменения иконки
курсора
26. Важно также иметь ввиду
Sustained Performance API – запрос на долгую нагруженную фоновую
работу
Улучшения в Print Service – больше возможности для кастомизации
FrameMetricsListener API – измеряем производительность на продакшен-
сборках
Virtual Files – доступ к облачным файлам, как к обычным
28. Рантайм на три буквы
ART имеет теперь не только Ahead of Time, но и Just in Time компиляцию.
По заверениям разработчиков это повышает качество оптимизаций,
сокращая использование RAM и ускоряя работу приложения.
Также это избавляет от шага оптимизации при обновлении системы.
30. Больше никакой линковки к нативным либам
обращения к приватным
нативным библиотекам API < 24 API = 24 API > 24
NDK Public разрешен разрешен разрешен
NDK Private
не удаленные
тост и лог с
предупреждением
тост и лог с
предупреждением
ошибка
NDK Private
удаленные
ошибка ошибка ошибка