Intereting Posts
Force FullScreen на EditText в Android Отображать AlertDialog как окно оверлея системы из Service Android SDK отсутствует, устарел или отсутствует шаблоны. Убедитесь, что вы используете SDK версии 22 или более поздней версии Подключение к USB-устройству Android в контейнере Docker через adb Eclipse Android: не удалось открыть выбранный порт отладки VM (8700) Не удается достичь некоторых отладочных приложений для Android Сбой отчета об установке для Android Перемещаться от одного фрагмента к другому при нажатии кнопки Android: закрыть диалоговое окно при касании Действительно ли React действительно поддерживает Android-фрагменты? Как сделать мой ImageView фиксированным, независимо от размера растрового изображения Android: Имитировать Wi-Fi в эмуляторе? Android Alarm Manager с широковещательным приемником, зарегистрированным в коде, а не манифестацией Скрыть время в уведомлении Android без использования пользовательского макета Как сообщить своему пользовательскому FragmentPagerAdapter прекращение уничтожения моих фрагментов?

Общий дизайн приложения (IntentService / ContentProvider / AsyncTask)

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

То, как я реализовал свое последнее приложение для Android, следующее. У меня есть IntentService который получает запросы от действий для получения информации от веб-служб. Мой Service уведомляет действия через ResultReceiver о статусе запроса (запущен / ошибка / завершен). После вызова веб-службы, получения результата (xml / json) и разбора его, я помещаю эту информацию в ContentProvider ( ContentResolver базы данных sqlite) и использую ContentResolver для уведомления о каких-либо действиях об изменениях. Действия получают уведомления об изменениях (некоторые используют ContentObserver а другие используют SimpleCursorAdapter s и автоматически уведомляются).

Теперь проблемы с моим подходом:

  • Каждый раз, когда я вхожу в действие, я запрашиваю информацию из веб-службы с помощью метода, описанного выше, и я удаляю все строки в этой конкретной таблице, заполняю ее новой информацией и уведомляю об этом. Итак, если пользователь нажимает назад, а затем снова появляется, я снова делаю весь танец. Я думаю, что я должен добавить некоторые поля в базу данных, когда был последним обновленным и т. Д., Но я не знаю, как именно это исправить. Предложения? Я думаю, что одним из альтернатив будет использование аварийных сигналов и триггерных обновлений через определенные промежутки времени. Но в моем случае спецификация запрашивает проверку веб-службы каждый раз, когда я вхожу в эту активность.
  • Когда я вызываю веб-службу, я показываю неопределенный индикатор выполнения в действии над другими представлениями (которые содержат информацию, полученную ранее, и которая находится в базе данных до тех пор, пока вызов веб-службы не завершится), но пользователь может начать взаимодействие с представлениями И это не хорошо (информация может исчезнуть из базы данных). Любой способ отключить взаимодействие? На ум приходит прогресс.
  • Если я быстро перехожу через различные действия, IntentService блокируется предыдущими вызовами веб-службы, и для получения последнего вызова веб-службы требуется больше времени. Я мог бы создать несколько IntentService для каждого веб-сервиса, но я не думаю, что это его цель.

У меня такое ощущение, что подход, который я сделал, на самом деле не самый лучший для этого конкретного приложения. Он частично вдохновлен приложениями ввода-вывода Google (я не мог понять все, как обновленные поля sqlite и т. Д.). Одним из вариантов было бы использование AsyncTasks во всех действиях. Но где я могу хранить информацию для доступа к другим видам деятельности? В списках в Application ? И как насчет управления идентификаторами?

Меня действительно интересуют ваши мнения / идеи / предложения и как я могу сделать свои следующие приложения более эффективными и эффективными.

Solutions Collecting From Web of "Общий дизайн приложения (IntentService / ContentProvider / AsyncTask)"

Вы проверили этот разговор? http://www.youtube.com/watch?v=xHXn3Kg2IQE

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

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

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

Существует четкий журнал, в котором говорится:

Log.w(TAG, "Dropping result on floor for code " + resultCode + ": " + resultData.toString());

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

Однако, взгляните на разговор и на слайды.