Каждая языковая пара требует, чтобы модели источника и цели находились на устройстве до запуска перевода. Модели скачиваются один раз, сохраняются при перезапусках приложения и используются повторно для каждого перевода этой пары. Страница загрузки моделей перечисляет все 19 поддерживаемых языков с их состоянием загрузки и позволяет скачать или или удалить каждый.
Зачем выделенная страница
ML Kit не загружает модели автоматически — каждая языковая пара требует явной загрузки своего источника и цели. Страница загрузки моделей показывает это состояние и позволяет пользователю управлять им, не углубляясь в хранилище платформы.
Для большинства пользователей рабочий процесс невидим: выберите исходный и целевой язык, приложение скачивает обе модели по требованию при первом переводе, и модели остаются на устройстве для последующих запусков. Выделенная страница предназначена для пользователей, которые хотят предварительно скачать для офлайн-поездок, удалить языки, которые больше не используют, или посмотреть, что потребляет хранилище.
Состояния модели для языка
- Не скачана. Показана кнопка «Скачать». Нажмите, чтобы начать загрузку.
- Загружается. Показан неопределённый спиннер. ML Kit не предоставляет обратные вызовы о прогрессе, только о завершении; спиннер разрешается в «Скачано» или «Ошибка».
- Скачана. Показан значок с кнопкой «Удалить». Нажмите, чтобы удалить модель и освободить хранилище.
- Ошибка. Кнопка «Повторить» заменяет «Скачать». Распространённые причины: нет сети, сотовая связь заблокирована, мало места на диске. Повторите после устранения основной причины.
Последовательная очередь загрузок
Несколько запросов на загрузку в быстрой последовательности ставятся в очередь, а не выполняются параллельно. Нативный плагин iOS не обрабатывает параллельные вызовы manageModel чисто: второй запрос отменяет первый. Приложение сериализует загрузки через одну цепочку Future, чтобы параллельные запросы разрешались один за другим. UI показывает только активную загрузку в неопределённом состоянии; запросы в очереди ждут своей очереди.
Тайм-ауты и опрос загрузки
Если обратный вызов загрузки пропущен (наблюдается на iOS в условиях плохой сети), Future загрузки может зависнуть. Приложение защищается от этого с помощью 30-секундного тайм-аута; если тайм-аут срабатывает, приложение опрашивает диск напрямую через isModelDownloaded, чтобы подтвердить, действительно ли модель приземлилась, прежде чем сообщить об успехе или неудаче.
Стоимость хранилища
Каждая модель ML Kit занимает на диске примерно 10–50 МБ. Загрузка всех 19 языков потребляет примерно 300–600 МБ. Модели для источника и цели одного перевода отдельные; одна модель может служить либо источником, либо целью в зависимости от выбранной пользователем роли.
Удаление модели освобождает место. Автоматической очистки нет. Удаление приложения удаляет все загруженные модели в рамках удаления с платформы.