Я пытаюсь создать приложение, которое содержит Content Observers в удаленной службе, но постоянно получало сообщение об ошибке:
"Невозможно создать обработчик внутри потока, который не вызвал подготовку Looper"
Я много читал на сайте разработчиков Android, а также много поисков в Google, но до сих пор не до конца понимаю проблему.До сих пор я понял, что Content Observer нужен поток для запуска (для обработчика).После добавления:
Looper.myLooper().prepare();<br/>mObserver = new Observer(new Handler());
вызов Looper непосредственно перед созданием нового Content Observer заставляет приложение работать правильно.Однако я хотел бы лучше понять, почему это так - ничто из того, что я нашел в Интернете, не помогло мне понять почему до сих пор.Кроме того, правильное и эффективное добавление строки кода Looper?И нужно ли мне что-то делать для предотвращения утечек памяти в будущем?
Чем проще объяснение, тем лучше.Тем не менее, в мой первый месяц разработки Android и достижения хорошего прогресса - StackOverflow оказал огромную помощь!Спасибо.
ОБНОВЛЕНИЕ После игры и больше чтения, я думаю, лучше понять, как сделать эту работу и как ее почистить, но при этом еще не хватает одной маленькой детали.
Из того, что я собрал, я могу назвать Looper.prepare() как статический метод.Затем я могу создать свой обозреватель контента, используя новый обработчик ().Когда я хочу остановить этот обозреватель контента, я могу получить поток объекта с помощью mLooper = Looper.myLooper.getThread (), а затем я могу запустить mLooper.quit ().Тем не менее, я должен и когда я буду и почему я должен вызывать mLooper.loop ()?
ОБНОВЛЕНИЕ 2 Итак, вот проблема, которую я решаю.Приложение находится в работе и немного сложно объяснить, но вот мой лучший способ:
У нас работает удаленная служба, которая получает и отправляет данные сети.Наши типы сообщений определены в данных, поэтому мы можем направить их в нужную базу данных на телефоне.Существует файл интерфейса Jar для импорта другими APK для подключения к работающей службе.Эти APK могут регистрироваться для получения трансляций при получении нового интересующего их сообщения.Для этого наблюдатель контента регистрируется в контенте, который использует APK, таким образом, когда новые данные добавляются в базу данных, наблюдатель контента отправляет трансляцию, чтобы предупредить правильный APK.Затем APK может обработать это по своему усмотрению.
Поэтому было бы хорошо использовать null в качестве параметра нового обозревателя контента или лучше использовать новый Handler () для создания потока для этого наблюдателя,
Я пытался создать поток, но пока он не работает, я думаю, что это потому, что я не запустил Looper.loop (это замораживает мой сервис).Любой совет будет принята с благодарностью!Заранее спасибо.