2012-06-20 3 views
0

Я работаю над приложением, где мне нужно загружать множество изображений локально (чтобы они были доступны в автономном режиме). Количество изображений может быть 100 - 10000. Каждое изображение может отличаться от 100K-250KЗагрузка большого количества изображений в приложении для iPad

Я могу сделать это с помощью NSOperationQueue, и у меня есть код, чтобы сделать эту работу уже, но этот вопрос более концептуальный. Я не уверен, что лучше всего подходит для этого.

1) Скачайте все изображения сразу после входа пользователя в систему в первый раз? Основываясь на количестве изображений, это может занять много времени, и что, если пользователь закрывает приложение тем временем. Я понимаю, что существует ограничение на время, которое может быть потрачено на фоновый процесс в этом случае? Честно говоря, я не хочу ничего делать в фоновом режиме (т. Е. Когда приложение закрыто)

2) Загружаю ли изображения, когда определенная категория выбрана пользователем? Если в категории 800 изображений, то что произойдет, если пользователь выберет другую категорию, прежде чем все эти 800 изображений будут завершены? Я всегда могу начать загружать потоки, но будет ли поток продолжать работать, если пользователь выбирает другую категорию?

3) Поместите что-нибудь в «Настройки», чтобы пользователь сам решил это. Что-то вроде «Всего изображений: 8000» Доступные изображения: 2000 и кнопка, чтобы сказать «Загрузить все», в котором будет отображаться UIProgressView о том, что происходит ..., поэтому пользователь, вероятно, подождет, пока все будет сделано.

Или какой-либо другой подход?

Мысли?

+0

Какое приложение это? Если изображения являются частью приложения, то просто свяжите его с приложением. Если изображения представляют собой контент пользователя или какой-либо контент, который вы обслуживаете, вам нужно подумать, нужны ли вам сразу все изображения или нет - обычно я не думаю. – nhahtdh

+0

Это созданный пользователем контент, поэтому его нельзя связать с приложением. –

+0

Вы можете выполнять прогрессивную загрузку (отображать фиксированное число, загружать больше только при запросах пользователя) и/или создавать миниатюру для всех изображений, чтобы вы загружали только полное изображение, когда пользователь хочет увидеть его подробно. Другой способ - показать экран загрузки, в котором вы загружаете все локально в первый раз, но это может занять много времени, если слишком много изображений, и пользователь может ragequit, если им приходится слишком долго ждать. – nhahtdh

ответ

0

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

Что это влечет за собой:

  1. отслеживать, какие изображения вы загрузили;

  2. каждый раз, когда приложение запускается/возобновляется, вы начинаете загружать нить точно с того места, где вы оставили;

  3. вы также должны предоставить механизм, чтобы пользователь был соответствующим образом проинформирован, когда он пытается получить доступ к еще не загруженному изображению, но я думаю, что это не должно быть проблемой (вы также можете указать индикатор прогресса где-нибудь).

+0

Это именно то, чего я пытаюсь выполнить. Зеркалирование удаленной базы данных изображений для автономного использования. Тем не менее, я не уверен, как сделать поток возобновляемым. У меня есть все изображения в объекте Core Data, поэтому я точно знаю, какие из них были загружены, а какие нет. У вас есть код, чтобы показать, как начать/возобновить процесс? –

+0

это загрузка, которая должна быть возобновлена, а не поток; каждый раз, когда вы начинаете новый поток, и этот поток загружает оставшиеся изображения. это помогает? – sergio

+0

Да. Итак, этот поток будет в следующем методе AppDelegate? - (void) applicationDidBecomeActive: (UIApplication *) application –

0

Я бы только загрузил изображение, когда пользователь действительно должен что-то сделать с изображением. Ваши пользователи будут ненавидеть вас, если вы загрузите все изображения заранее. :)

+0

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

+0

Можете ли вы загрузить те, которые активно обрабатываются, пометить их как загруженные, а затем загружать только новые, с которыми нужно работать? Существует тайм-аут, когда приложение переводится на задний план. Вы можете запросить больше времени, но обычно это около 10 минут. – tjg184

+0

Итак, в конце концов (не все сразу), все изображения будут загружены, но только при необходимости. – tjg184

Смежные вопросы