Очередь запросов Android Volley не выполняет все запросы

На некоторых устройствах моя очередь запросов Volley не выполняет все сетевые запросы, которые я добавил в очередь. Я пробовал два подхода к этому, подход один:

1) Рекурсивный метод, при котором последующие сетевые запросы вызывались в методе onResponse предыдущего запроса.

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

2) Цикл for, в котором все объекты запроса добавляются в очередь запросов до того, как любой из них сделает сетевой вызов.

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

Я использую синглтон для обслуживания своей очереди запросов, поэтому это не должно иметь ничего общего с уничтожением IntentService системой.

понимание ценится


person CQM    schedule 25.11.2014    source источник


Ответы (1)


если вы используете IntentService, он уничтожается, как только возвращается метод handleIntent. если в это время не выполняется никаких действий, ваше приложение завершается, и ваш синглтон исчезает.

С volley вам не нужен IntentService, так как Volley обрабатывает асинхронность за вас.

Используйте стандартную услугу с START_STICKY в качестве возврата и не забудьте stopSelf, когда вы закончите свои запросы.

person njzk2    schedule 25.11.2014
comment
хм, на самом деле проблема все еще происходит. Мои потоки Volley начинаются до того, как onStartCommend вернется, и после того, как он вернется, он может иногда убить синглтон. Но это при том, что деятельность все еще продолжается. - person CQM; 25.11.2014
comment
это странно. Сколько времени это занимает? - person njzk2; 25.11.2014
comment
на самом деле это многокомпонентная загрузка с байтами, разделенными на 14-40 частей. Я знаю, что Google сказал о том, что Volley обрабатывает большие полезные нагрузки, но это сильно модифицированный залп для обработки многокомпонентных загрузок. По сути, порции байтов добавляются к отдельным запросам (типа MultipartRequest), и эти запросы добавляются в очередь запросов, как обычные запросы. Volley загружает их, и серверу это нравится, но на некоторых устройствах иногда убивается синглтон requestQueue или что-то в этом роде. Другие устройства просто проходят через всю очередь загрузки. - person CQM; 25.11.2014