Я создал приложение, которое использует IntentService для манипулирования базой данных приложения и вызова веб-служб.
Пример:
У меня есть действие, представляющее собой список элементов.Этот список заполняется CursorAdapter.Каждый элемент имеет флажок, и список упорядочен по флажку (непроверенные элементы сверху и отмеченные элементы снизу).Когда флажок элемента установлен, я отправляю Intent своему IntentService, чтобы он пометил отмеченный столбец в таблице базы данных для этого элемента, затем передается сообщение, Activity видит его и повторно запрашивает Cursor.
Когда я использую мобильное устройство и начинаю быстро устанавливать флажки, приложение по существу зависает.Пользовательский интерфейс не зависает, а IntentService в фоновом режиме.Я могу сказать, потому что Курсор на экране не обновляется.
Насколько я понимаю, Интенты, переданные IntentServices, не обрабатываются асинхронно.Это верно?Он ведет себя почти так, как будто мне нужно использовать семафоры, но я не могу понять, почему, если Интенты ставятся в очередь и обрабатываются индивидуально.
Предположим, я установил 3 флажка;Таким образом, есть 3 намерения в очереди.После первого я передаю сообщение, которое получает Activity, сообщая, что нужно запросить его курсор.Может ли быть потенциальная проблема, потому что я запрашиваю Курсор одновременно с обработкой второго Намерения (обновляя другую строку в таблице)?Запрос курсора происходит в потоке пользовательского интерфейса.
^ Я думаю, что это моя проблема.Что я должен использовать для синхронизации этого?Семафоры?Может кто-нибудь указать мне какую-нибудь документацию / примеры?
Другая потенциальная проблема заключается в том, что если моя активность управляет курсором на столе;также мой IntentService запрашивает курсор из той же таблицы.У меня есть случаи, когда это происходит, когда мой IntentService просматривает каждую строку в курсоре, чтобы найти элементы для отправки в веб-службу.Хотя я не думаю, что это будет проблемой, если Курсоры не запрашивают одновременно?
У кого-нибудь есть другие идеи?