ASIHTTPRequest и фоновая загрузка

#iphone #delegates #background #download #asihttprequest

#iPhone #делегаты #фон #Скачать #asihttprequest

Вопрос:

Я планировал использовать ASIHTTPRequest для загрузки файла mp3. мне нужно будет использовать очереди, потому что может быть несколько одновременных загрузок.

Я видел, что вы можете использовать

 [request setShouldContinueWhenAppEntersBackground:YES];
  

если вы хотите поддерживать фоновое выполнение…
Если файл завершается в фоновом режиме, как я могу с этим справиться?

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

PS: Я нахожусь на iOS4, и поддерживается фоновый exec.

Ответ №1:

requestFinished Метод все равно должен вызываться до того, как endBackgroundTask: будет вызван при загрузке; однако, чтобы гарантировать выполнение нужной вам функциональности (значок уведомления или что-то еще), вы должны использовать UIBackgroundTask .

В основном идея заключается в том, что вы создаете новую фоновую задачу и используете beginBackgroundTaskWithExpirationHandler: в методе delegate finished, а затем делаете все, что хотите в фоновой задаче (смотрите руководство Apple по разработке об этом здесь).

Убедитесь, что вы вызываете endBackgroundTask свою задачу после того, как закончите!

Комментарии:

1. UIBackgroundTask требует синхронной работы, не так ли? Мне нужно показывать ход загрузки по мере того, как это происходит. Сделает ли синхронность операции невозможным получение уведомлений делегатов о ходе выполнения?

2. Я не верю, что есть способ показать пользователю прогресс, пока приложение работает в фоновом режиме. Я говорил об использовании UIBackgroundTask для уведомления пользователя о завершении загрузки, если приложение завершает загрузку в фоновом режиме. Вы все равно будете использовать ASIHTTP для загрузки / мониторинга очереди.

3. Похоже, у меня недостаточно опыта, чтобы полностью понять этот ответ. : ( из того, что вы сказали, я понял, что делегаты (ASIhttp …) будут вызваны в любом случае, и мне придется запустить beginBackgroundTask ….. чтобы выполнить уведомление. Это вызывает у меня в голове еще один вопрос. Если я попытаюсь обновить UIProgressBar в делегате, разве не существует правила, согласно которому приложение, которое обновляет пользовательский интерфейс в фоновом режиме, будет мгновенно убито? Есть ли способ узнать, вызывался ли делегат, когда приложение работало в фоновом режиме? (Простите меня, но я немного неопытен.)

4. Кроме того, я не хочу показывать какие-либо обновления, поскольку пользователь находится в фоновом режиме. Мне просто нужно показывать панель прогресса, когда она находится на переднем плане, и поддерживать загрузку в фоновом режиме.

5. Я загружаю файл, и он останавливается при переходе в фоновом режиме, я использовал вышеупомянутую строку, и она мгновенно завершилась сбоем, и сотрудник сервера сказал мне, что ваш сокет был отключен с этой ошибкой: «Не удалась обработка запроса multipart / form-data. Ошибка чтения из сокета»