5 августа 2018 г.

Изменения поведений в Android P. Часть 2: от тегирования сокетов до ещё большего урезания Apache HTTP client (дважды!)

Последняя публичная бета
Дальше — релиз

     Эта статья является переводом второй половины вот этой: https://developer.android.com/preview/behavior-changes.html. Как всегда, я рекомендую читать оригинал.
    Перевод первой половины: https://myachinqa.blogspot.com/2018/04/android-p-1.html

   Теги сокетов

    До Android P, если сокет был затеган методом setThreadStatsTag(), то при использовании binder IPC с ParcelFileDescriptor контейнером для отправки сокета другому процессу, тег слетал.
    В Android P это поведение изменилось и теперь в этом сценарии тег сохраняется. Такое изменение может повлиять на оценки статистик сетевого трафика, если, например, получить их у метода queryDetailsForUidTag(). Чтобы вернуть старое поведение  вам нужно вызвать untagSocket() перед отправкой сокета другому процессу.

Сообщение о доступном объёме байтов в сокете

    Если вызвать метод available() после shutdownInput(), то будет возвращён 0.

Больше данных о сетях для VPN клиентов

    До версии платформы ниже Android P класс NetworkCapabilities сообщал ограниченный набор данных для VPN. Например, сообщал TRANSPORT_VPN, но не NET_CAPABILITY_NOT_VPN. Из-за этого разработчикам было трудно понимать, приведёт ли использование VPN к расходу средств пользователя. К примеру, проверка NET_CAPABILITY_NOT_METERED не определяла, поднят VPN на сети с оплатой трафика или же на безлимитной сети.
    Начиная с Android P, когда VPN вызывает метод setUnderlyingNetworks(), система просуммирует транспорты и свойства всех сетей, на которых запущено подключение и вернёт нормальную совокупность свойств этих сетей.