Posts of Мобильная разработка

newest first

#4870Photo
Views634−41%vs avg
Forwards3
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
6 h565
18 h634
  1. After 6 hours565
  2. After 24 hours634
  3. Total to date634
#4869Photo
Views750−31%vs avg
Forwards2
Reactions2
Comments0
#4868Video
Views896−17%vs avg
Forwards3
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
6 h534
18 h622
30 h896
  1. After 6 hours534
  2. After 24 hours896
  3. Total to date896
#4867Video
Views930−14%vs avg
Forwards3
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
12 h746
36 h930
  1. Total to date930
#4866Video
Views890−18%vs avg
Forwards6
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
5 h453
17 h581
29 h890
  1. After 6 hours453
  2. After 24 hours890
  3. Total to date890
#4865Photo
Views957−12%vs avg
Forwards3
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
12 h614
36 h873
72 h957
  1. Total to date957
#4864Video
Views937−13%vs avg
Forwards4
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
30 h718
78 h937
  1. After 24 hours718
  2. Total to date937
#4863Photo
Views913−16%vs avg
Forwards2
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
36 h765
72 h913
  1. Total to date913
#4862Video
Views979−10%vs avg
Forwards4
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
54 h893
78 h979
  1. Total to date979
#4861Video
Views956−12%vs avg
Forwards1
Reactions—
Comments0
Views growthHide views growth

Views growth

Hours after publication

Show as table
Hours after publicationViews
0 h0
60 h944
72 h956
  1. Total to date956
#4860Video
Views974−10%vs avg
Forwards4
Reactions—
Comments0
#4859Photo
Views1,006−7%vs avg
Forwards3
Reactions—
Comments0
#4858Photo
Views1,031−5%vs avg
Forwards2
Reactions—
Comments0
#4857Photo
Views1,032−5%vs avg
Forwards2
Reactions3
Comments0
#4856Photo
Views1,106+2%vs avg
Forwards6
Reactions1
Comments0
#4855Video
Views1,118+3%vs avg
Forwards4
Reactions0
Comments0
#4854Text
Views1,259+16%vs avg
Forwards2
Reactions—
Comments0
#4853Text
Views1,347+24%vs avg
Forwards2
Reactions1
Comments0
#4852Text

Счётчик в DataStore увеличивайте внутри updateData Прочитать значение, прибавить единицу в интерфейсе, записать результат — между этими действиями другое обновление может изменить тот же счётчик. Если записать число из старого состояния экрана, прибавление потеряется. У Jetpack DataStore преобразование выполняют внутри updateData. В официальном примере с JSON новый объект строится из переданного текущего состояния: settings.copy(exampleCounter = settings.exampleCounter + 1). Чтение, изменение и запись образуют одну атомарную транзакцию. Для Preferences есть и suspend-функция edit. Эта гарантия требует правильного использования: один активный экземпляр DataStore на файл в одном процессе и неизменяемый тип данных. Для нескольких процессов нужен MultiProcessDataStore, доступный с версии 1.1.0. Гарантия не распространяется на общую транзакцию с сервером или другим файлом. Для сложных связанных данных уместнее Room.

Open in Telegram
Views1,353+25%vs avg
Forwards3
Reactions—
Comments0
#4851Text

Форма во Flutter может пережить завершение фонового процесса Пользователь заполнял форму, переключился в другое приложение, а Android освободил память и завершил фоновый процесс. При возвращении экран создаётся заново. Для незавершённого ввода и выбранной вкладки у Flutter есть state restoration. Восстановление подключается по уровням: restorationScopeId у приложения, restorationId у поддерживающих его виджетов. Собственное состояние хранят в RestorableProperty и регистрируют в restoreState через RestorationMixin. Данные передаются движку по мере изменений, а не только в последний момент перед завершением процесса. Навигацию нужно настроить отдельно. При прямой работе с Navigator стек восстанавливают через методы вроде restorablePush. А важный черновик всё равно стоит сохранять в постоянном хранилище: объём instance state на Android ограничен, и restoration не даёт гарантии для любого принудительного закрытия приложения. Проверка через hot reload также не заменяет тест восстановления после завершения процесса.

Open in Telegram
Views1,418+31%vs avg
Forwards4
Reactions2
Comments0
#4850Text

Смена id отменяет SwiftUI task, но не останавливает любой код внутри В поиске пользователь уже дописал запрос, а обработка предыдущего ещё идёт. Модификатор .task(id: query) связывает задачу со значением запроса: при изменении id SwiftUI отменяет старую задачу и создаёт новую. Само значение должно быть Equatable. Базовый механизм доступен с iOS 15. Дальше действует правило Swift Concurrency: отмена кооперативная. Произвольная функция может продолжить работу, если сама не проверяет отмену и не вызывает код, который на неё реагирует. Для собственной долгой обработки есть Task.checkCancellation(), бросающий ошибку при отмене. Поэтому при разборе такого поиска полезно проследить весь путь запроса до обновления экрана. Если тяжёлая обработка игнорирует отмену, один .task(id:) этого не исправит. Он также не гарантирует защиту от всех устаревших результатов.

Open in Telegram
Views1,363+26%vs avg
Forwards3
Reactions—
Comments0
#4849Text
Views1,380+27%vs avg
Forwards7
Reactions0
Comments0
#4848Photo

Google открыл публикацию Android-игр для автомобильных экранов с запуском только на стоянке Игры для Android Auto и Android Automotive OS вышли из беты: теперь разработчики могут отправлять их в открытое тестирование и в рабочую публикацию Google Play. В руководстве по адаптации разобраны настройки манифеста и требования к поведению. Для Android Auto поддержка игр начинается с Android 15; для Automotive OS отдельно объявляется автомобильный форм-фактор. Игры относятся к приложениям для стоянки. При начале движения система блокирует их интерфейс, а разработчик должен остановить звук и исключить его повторный запуск в движении. После возвращения в игру состояние нужно восстановить как можно ближе к прежнему. Ещё понадобятся адаптация под широкие и вертикальные экраны и проверка качества. Android Auto тестируют через Desktop Head Unit, Automotive OS — через соответствующий эмулятор. Одних изменений манифеста для публикации недостаточно.

Open in Telegram
Views1,419+31%vs avg
Forwards3
Reactions2
Comments0
#4847Photo

Typed throws в Swift позволяет проверять обработку конкретного типа ошибок при компиляции Обычный throws сообщает, что функция может завершиться ошибкой, но не ограничивает её конкретным типом. В catch приходится выяснять, что именно прилетело. В разборе typed throws функция объявляет throws(CatError). Когда тип сохраняется до обработчика, catch получает CatError, и компилятор проверяет полноту switch по вариантам перечисления. Однако конкретный тип можно потерять. Например, если внутри do вызываются функции с разными типами ошибок, результат может расшириться до any Error. Типизация замыканий тоже влияет на то, что дойдёт до вызывающего кода. У публичного API есть цена: расширение набора ошибок затрагивает клиентов с исчерпывающей обработкой. Поэтому точный тип полезен там, где этот контракт действительно нужен. Автоматически заменять им все обычные throws не стоит.

Open in Telegram
Views1,338+24%vs avg
Forwards5
Reactions—
Comments0