Подтвердить что ты не робот

Шаблон для нескольких загрузчиков с LoaderManager?

Я использую Fragments и LoaderManager. Я должен запустить неизвестное количество задач, и они могут запускаться параллельно (в противном случае я бы просто использовал один и только один загрузчик). Например, у меня есть listview, и каждая строка может иметь кнопку для сохранения содержимого этой строки на веб-сервере. Пользователь может инициировать запрос на сохранение нескольких элементов параллельно.

private int nextId = 0;

private void onClickListener() {
    Bundle bundle = new Bundle();
    bundle.putNextData(...);
    getLoaderManager().initLoader(nextId++, bundle, this);
}

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

Спасибо

4b9b3361

Ответ 1

Я не думаю, что вы должны использовать Loader для сохранения данных на удаленном сервере.

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

Сохраненная очередь, обработанная IntentService (или эквивалентом), также является отличным способом повторить неудачные операции с отсрочкой, поскольку вы можете реализовать отложенные повторы с экспоненциальным отсрочкой, используя AlarmManager.

Ответ 2

Служба IntentService или связанная служба всегда являются хорошими подходами для этого. Как отмечают римские точки, обратите внимание, что включение нескольких запросов и их вызов по отдельности не рекомендуется (очень вероятно, что вы приложите много усилий для радиосвязи - при использовании данных, которые, помимо прочего, разряжают батарею. href= "http://developer.android.com/training/efficient-downloads/efficient-network-access.html" rel= "nofollow" > обязательно прочитать об этом)

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

Обновите нас о ваших успехах.

Ответ 3

Вы находитесь в правильном направлении, позвольте мне немного помочь вам.

Повторное использование действительно хорошая идея, и вам не нужно беспокоиться об этом, потому что Android сделал это за вас (или Java на самом деле;)

Он называется ThreadPoolExecuter, вы можете запустить столько задач, сколько пожелаете, и он только откроет предопределенное количество потоков. (Лучшая практика - пытаясь открыть столько потоков, сколько параллельное сетевое соединение может быть запущено на устройстве. Из моего исследования это между 4 - 9).

И если вы пытаетесь загрузить один и тот же URL дважды, возможно, вы можете защитить себя и открыть для него только одну задачу.