Скачать большой шаблон данных приложения - PullRequest
3 голосов
/ 08 февраля 2011

Я разрабатываю приложение для рендеринга карт для Android. Данные карты довольно большие, около 1,1 Гб. Поскольку на рынке и в телефоне существуют ограничения для размера .apk, рекомендуется загружать его при запуске приложения.

Это шаблон, который я сейчас использую:
1. Основное действие (используется для рендеринга карты) проверяет, доступны ли данные, если нет, я запускаю операцию загрузки
2. При загрузке запускается локальная служба
3. Сервис загружает zip-файлы и распаковывает данные карты
4. Сервис отправляет события на загрузку активности и уведомления

Я порождаю службу, поскольку весь процесс может занять от 30 минут до нескольких часов в зависимости от телефона и сети.

Но мне сложно убедиться, что запущен только один экземпляр программы, я пробовал все комбинации свойства launchmode, но безрезультатно.

Как вы понимаете, два запущенных экземпляра приведут к сбою загрузки / распаковки.

Это действительно расстраивает! Сейчас я делаю некрасивую блокировку чтения / записи в SDCard и большую часть времени работаю, чтобы убедиться, что работает только один экземпляр.

Я нацеливаюсь на Android 1.6 и выше.

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Чтобы избежать проблем с несколькими экземплярами, вы должны использовать удаленную службу вместо локальной службы. Таким образом, вы можете иметь только один экземпляр службы, который будет загружать данные, необходимые для приложения.

0 голосов
/ 08 февраля 2011

1,1 ГБ для мобильного устройства - это огромный объем данных.Даже по Wi-Fi, если соединение не очень хорошее, как вы сказали, это займет некоторое время, а также повлияет на производительность телефона.Я ожидаю, что пользовательский опыт будет плохим - его телефон будет работать медленно во время загрузки, вероятно, будет недоступен при распаковке такого большого количества данных, а само приложение не будет использоваться вообще, пока данные не будут загружены вполный (это может занять несколько попыток).

Если бы это был я, я бы искал способ разбить данные, возможно, по географическому региону, и загрузить их в пакетах.Таким образом, если загрузка пакета не удалась, приложение может повторить попытку, и пользователь все еще может, в некоторой степени, использовать приложение.Вы сказали, что ваше приложение является картографическим, поэтому, возможно, вы сможете определить местоположение / страну пользователя и сначала загрузить наиболее подходящий пакет.Будет ли это работать, будет зависеть от того, сможет ли пользователь вообще использовать приложение без ВСЕХ данных.

Проблема в том, что приложения Android могут быть GC в любой момент, поэтомуВаше требование, чтобы приложение работало в течение относительно длительного периода времени, выполняя интенсивную работу, но в фоновом режиме, конкурирует.Все, что нужно сделать пользователю, это открыть большое приложение, такое как Браузер, и ваша служба может быть закрыта.Имея одну крупную транзакцию загрузки, вы загоняете себя в угол.

В качестве альтернативы, вы могли бы физически предоставить данные на SD-карту?Это не очень хорошее решение, но, учитывая размер вашего набора данных, его стоит рассмотреть.

...