Денис Неклюдов. Держи свое приложение на волне...

  • View
    110

  • Download
    9

  • Category

    Mobile

Preview:

Citation preview

Держи свое приложение на волне новинок

Денис НеклюдовGoogle Developer Expert

Ведущий подкаста Android DevРазработчик в

А там что-то изменилось?

Изменения в DozeMode

Экономим трафик пользователя

Data Saver Mode – ограничение фонового потока данных и не только.

ConnectivityManager.getRestrictBackgroundStatus():

RESTRICT_BACKGROUND_STATUS_DISABLED

RESTRICT_BACKGROUND_STATUS_ENABLED - нужно максимально снизить использование данных сети. Фоновые запросы к сети могут быть запрещены.

RESTRICT_BACKGROUND_STATUS_WHITELISTED

ConnectivityManager.isActiveNetworkMetered(): - ограничиваем использование сети и в этом случае.

Multi-window

Для быстрой отрисовки графики

Поддержка Vulkan API

OpenGL™ ES 3.2 API

Улучшения SurfaceView

Multi-window

Все Activity, кроме той, с которой пользователь только что взаимодействовал находятся в состоянии paused:- не останавливайте воспроизведение по onPause()

android:resizeableActivity = "true" – меняет размер всех activity в стеке

resizeableActivity – для API ≥ 24 по-умолчанию true

- Fullscreen запрещен

- изменения атрибута screenOrientation игнорируются

Multi-window

<activity android:name=".MyActivity">

<layout android:defaultHeight="500dp"

android:defaultWidth="600dp"

android:gravity="top|end"

android:minHeight="450dp"

android:minWidth="300dp" />

</activity>

Multi-window

Узнаем о многооконном режиме:

- isInMultiWindowMode()

- onMultiWindowModeChanged()

Не забываем про поддержку drag and drop!

Ответ в уведомлениях

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))

Отслеживание ответа в уведомлениях

Activity, определенная в PendingIntent ловит событие и обрабатывает его.

Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);

private CharSequence getMessageText(Intent intent) {

Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);

return remoteInput.getCharSequence(KEY_TEXT_REPLY);

}

Чтобы убрать прогресс в уведомлении, нужно удалить текущее уведомление или обновить его.

Чат в уведомлениях

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();

Группировка уведомлений

NotificationCompat.Builder(mContext)

.setStyle(new NotificationCompat.InboxStyle()

.addLine("Alex Faaborg Check this out")

.addLine("Jeff Chang Launch Party")

.setBigContentTitle("2 new messages")

.setSummaryText("johndoe@gmail.com"))

.setGroup(GROUP_KEY_EMAILS)

.setGroupSummary(true)

Quick Tile API

Для добавления своего значка быстрого доступа:

Создаем свой сервис наследник от TileService.

Можем запускать Runnable и отправлять Intent.

Можем менять иконку и текст.

Не можем раскрывать настройку на полный экран.

https://medium.com/@KieronQuinn/quick-settings-in-android-n-ea8ad8ce2eea

Шире возможности работы с телефоном

Добавлен черный список абонентов. android.provider.BlockedNumberContract

Появилась возможность дефолтному приложению для звонков:

Сбрасывать входящие

Удалять звонок из истории

Скрывать уведомление о входящем звонке

android.telecom.CallScreeningService

Изменилась стратегия поиска подходящей строки:

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)

Улучшения локализации

Больше улучшений ввода

Встроенный ICU4J (нет поддержки ICU4C)

Новые эмодзи и расширенная их поддержка

было:

стало:

WebView

Если установлен Chrome - будет использоваться он вместо WebView.

Можно запустить в отдельном процессе.

Теперь контекст JavaScript будет сброшен при загрузке новой странице

Доступ к геолокации только при HTTPS соединении

Доступ к новым бетам WebView

Android TV

Запись телепередач вашего приложения через TV recording API.

Возможность показывать “картинку-в-картинке”.

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() - для

миграции

Улучшения в безопасности

Key Attestation

Network Security Config

Default Trusted Certificate Authority

Debug-only overrides

Cleartext traffic opt-out

Certificate pinning

APK Signature Scheme v2

Scoped Directory Access

Scoped Directory Access

StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);

StorageVolume volume = sm.getPrimaryStorageVolume();

Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);

startActivityForResult(intent, request_code);

if (requestCode == OPEN_DIRECTORY_REQUEST_CODE && resultCode == Activity.RESULT_OK) { getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); updateDirectoryEntries(data.getData());}

Ближе к десктопам

Keyboard Shortcuts Helper для отображения всех хоткеев приложения

Custom Pointer API для изменения иконки курсора

Важно также иметь ввиду

Sustained Performance API – запрос на долгую нагруженную фоновую работу

Улучшения в Print Service – больше возможности для кастомизации

FrameMetricsListener API – измеряем производительность на продакшен-сборках

Virtual Files – доступ к облачным файлам, как к обычным

Не API, но нужно знать

Рантайм на три буквы

ART имеет теперь не только Ahead of Time, но и Just in Time компиляцию.

По заверениям разработчиков это повышает качество оптимизаций, сокращая использование RAM и ускоряя работу приложения.

Также это избавляет от шага оптимизации при обновлении системы.

Динамическое изменение DPI

Теперь пользователь может изменить плотность DPI без рута и перезагрузки.

Больше никакой линковки к нативным либам

обращения к приватным нативным библиотекам API < 24 API = 24 API > 24

NDK Public разрешен разрешен разрешен

NDK Private

не удаленные

тост и лог с предупреждением

тост и лог с предупреждением

ошибка

NDK Private

удаленные

ошибка ошибка ошибка

Спасибо за внимание!Денис Неклюдов

Подкаст: apptractor.ru/androidDev

telegram: @nekdenisnekdenis@gmail.com

Recommended