Реализация прогресс бара при отправке или загрузке файлов

Появился вопрос о том, как можно отследить статус отправки или загрузки файлов с сервера? Эта статья поможет найти решение, а также подобрать подходящий для вас вариант.

Пишем под самую популярную мобильную ОС

Появился вопрос о том, как можно отследить статус отправки или загрузки файлов с сервера? Эта статья поможет найти решение, а также подобрать подходящий для вас вариант.

derivedStateOf { ... }
derivedStateOf - это функция, которая из исходных объектов State формирует производный State. Основной смысл применения функции derivedStateOf - понизить частоту изменения исходного State, тем самым избавиться от ненужных рекомпозиций.
Лямбда-выражение, которое передается в derivedStateOf, выполняется каждый раз, когда изменяется любой из входных объектов State, и результат используется для обновления значения производного State. Важно понимать, что лямбда-выражение будет вызываться повторно только если изменится свойство value объекта State и чтение этого свойства происходит в этой лямбде. Изменение захваченных переменных другого типа не приведет к повторному вызову лямбда-выражения.
У объекта State может читаться свойство value в одной или нескольких compose-функциях. Через объект MutableState можно менять свойство value в callback'ах compose-функций или где-то еще за пределами compose, например во ViewModel'и. Если свойство изменилось, то в процессе построения следующего кадра произойдет рекомпозиция (повторный вызов) тех compose-функций, где это свойство читается. Таким образом частота изменения объекта MutableState определяет частоту рекомпозиций, но не чаще чем системный Frame rate, это примерно 60Hz, то есть 60 раз в секунду. Когда изменится State, Compose обновит UI при построении следующего кадра.
Когда частота изменения State слишком высокая, или другими словами есть некоторая последовательность изменений value State'а, при которой не нужно обновлять UI пускай даже значения разные, а следовательно не нужно совершать рекомпозицию, в этих случаях нужно использовать derivedStateOf. derivedStateOf определяет производный объект State от одного или нескольких других объектов State. Производный State должен обобщать исходные объекты State, то есть исходное множество значений State должно делиться на подмножества, и каждое такое подмножество будет соответствовать значению из производного множества. Изменения исходного State не всегда будут приводить к изменению производного State, таким образом понижается частота рекомпозиций.

Представьте приложение, в которое вы можете загрузить любую книгу на иностранном языке. При чтении вы будете нажимать на любое незнакомое слово, а приложение будет вам выдавать не кучу переводов из словаря, а предложит перевод, который соответствует контексту. А при переводе устойчивого выражение приложение не просто переведет его, а предложит вам объяснение этой фразы, привязанное к контексту. Ниже я покажу как оно работает.

Каждое большое приложение однажды сталкивается с задачей — увеличить скорость запуска. Не обошла она и приложение 2ГИС на Android. Расскажу, как команда тестирования искала причины медленного запуска.


На протяжении нескольких последних лет мобильная разработка движется в сторону декларативного пользовательского интерфейса. Кто-то начал раньше, кто-то – позже. Большой толчок развитию этого направления сообщество Android разработчиков получило благодаря языку программирования Kotlin, который отлично раскрывает данную концепцию. В 2019 Google представила свой фреймворк для создания декларативного UI: Jetpack Compose.
Подход имеет большое количество плюсов благодаря которым технология набирает популярность и развивается еще более динамично. Однако, как это часто бывает, новые технологии порой вынуждают нас заново изобретать решения старых проблем, об одной из которых я бы и хотел поговорить сегодня – компонент, который поддерживает отображение текста в свернутом и развернутом виде.


Picture in Picture Mode - удобный способ отображения контента в мини-окне.
Хорошо подойдет для фонового просмотра видео, звонков, gps-навигаторов.
В статье рассматривается настройка , отображение и взаимодействие с ui, а также работа с backstack'ом activity внутри PiP-mode.

Обзор всех изменений Android 13, которые пригодится вам знать чтобы протестировать работу приложения с новой версий ОС и узнать какие возможности вам будут полезны, чтобы улучшить ваш продукт, а какие вас заставит использовать Google Play!

Зачем нужна двухфакторная аутентификация? Почему именно JavaCard? Что общего у цифровой безопасности и Волан-де-Морта? Делюсь личным опытом…


На мундиале 2018 году в России. Футбольные болельщики со всего мира могли бы увидеть и поиграть в наш отечественный игровой контроллер для писуаров. Не хочется писать по каким организационным причинам этого не случилось. Здесь я хочу рассказать как происходила разработка этого нестандартного игрового аппарата.

Привет, Хабр! Я Дмитрий Воронов из Doubletapp, в этой статье расскажу, как мы делали навигацию в Яндекс Путешествиях. С навигацией в Android, кажется, давно все ясно: бери Jetpack Navigation, читай официальную документацию и следуй ей — и все получится. Если рекомендованная библиотека не подходит — берешь Fragment Manager, прописываешь собственную реализацию и идешь хвастаться коллегам. Если писать свою реализацию нет желания, а официальная библиотека не соответствует модным веяниям — дополняешь свое резюме умением работать с Cicerone. Если твои вкусы специфичны — почему бы не удивить людей неожиданным добавлением в проект Alligator?
В одном коротком абзаце удалось обозначить сразу 4 варианта реализации навигации и, казалось бы, в чем вопрос? Каждый выбирает для своего проекта подходящий ему вариант. Все так, но ровно до того момента, пока не возникает необходимость «поделиться» частью приложения — интегрироваться в другое приложение, и там, как оказывается, другая реализация навигации. И здесь начинается: «Что будем делать? Попробуем написать мост? А может, лучше перепишем навигацию?»
На этапе проектирования лучше сразу уточнить возможность дальнейшей интеграции с другими приложениями и заранее к этому подготовиться. Помимо всего прочего, нужно подготовить и навигацию, и сделать ее «внешней» — одно из возможных решений этой задачи.
• Что такое «внешняя» навигация?
• Как это делается?
• Реализуем модуль навигации
• Примеры реализации

Ранее мы с вами познакомились с пирамидой тестирования и ее основанием. В данной же статье предлагаю перейти к вершине.

Хотите, чтобы Google официально подтвердил ваши скиллы разработчика Android? Все не так уж трудно: рассказываю, как это делается…
Здравствуй, дорогой читатель. Каждый разработчик, независимо от его специальности, сталкивался (или столкнётся во время своей профессиональной карьеры) с задачей, в которой необходимо разработать проект, имеющий базу данных, серверную часть и конечный продукт, взаимодействующий с пользователем. Данная статья поможет новичку разобраться с данной задачей.
В статье будут затронуты такие важные темы, как теория баз данных, реляционная база данных PostgreSQL, Spring Framework и Android разработка. Также будет рассмотрен базовый, не очень сложный пример, который поможет разобраться во всех этих темах и "потрогать" их руками.
Статья предназначена для начинающего разработчика, но имеющего базовые знания о разработке программного обеспечения и языках программирования Java и Kotlin.
Все материалы и исходный код можно найти здесь.


2022 год оставил разработчиков из России без возможности заработка в привычных сторах, а также дал толчок развитию альтернативных способов монетизации приложений. Менеджер проекта команды SDK магазина приложений RuStore Александр Лукашенко рассказал, как удаётся разрабатывать инструменты для оплаты, push-уведомлений, получения оценок и отзывов внутри российского магазина приложений.

Меня зовут Евгений Торчинский, практически всю свою жизнь я работаю с технологиями. Сейчас я руковожу Movix Lab — мы уже много лет занимаемся железом, софтом и работаем с технологиями искусственного интеллекта.
Сегодня я и мои коллеги поделимся опытом в подборе параметров и способов тестирования качества Wi-Fi сигнала в смарт-устройствах. Поговорим также об особенностях конструирования антенн и их эволюции на примере наших устройств — ранней линуксовой ТВ-приставки и новой компактной Movix Go на Android TV. Проектирование последнего в силу сразу нескольких конструктивных особенностей стало для нас настоящим испытанием, но обо всем по порядку.
Отмечу, что этой статьи (как и самих приставок, о которых я здесь рассказываю) не было бы без команды «Девайсов» Movix Lab. Спасибо Павлу Мальцеву и Артему Егорову!

Всё еще публикуете релизы Android приложений вручную? Почитайте наше подробное руководство как полностью автоматизировать публикацию Android приложений в Google Play и Huawei AppStore через Gradle и CI/CD. Подробно от А до Я.