С вызовом, как:дооснащения обратного вызова на главном потоке
@GET("/user/{id}/data")
void getUserData(@Path("id") int id, Callback<Data> cb);
Обратный вызов должен быть выполнен в основном потоке (если не используется RxJava). Мои вопросы:
- Где происходит синтаксический анализ (предположим, что я использую XML-конвертер для ответа процесса). Это основная нить или другая? Это зависит от реализации конвертера?
- Если мне нужно включить некоторые (тяжелые) правила проверки/бизнес-правила, мне нужно создать новый поток внутри вызываемого? Или это хорошо, если это сделать в методах обратного вызова?
Я ищу способы, чтобы получить данные в моей деятельности от веб-сервиса избегая потокобезопасности управления в одиночку (или с использованием других подходов, таких как IntentService и т.д.), но боюсь использовать RxJava либо (из-за экспериментальной поддержки). Есть ли другой подход к решению этой проблемы?
«Если я должен включать в себя некоторые (тяжелые) правила проверки/бизнес-правил, нужно ли мне на нерест новая резьба внутри вызываемого? " - в этом случае вы не должны * использовать * 'Callback'. Удалите его, получите 'getUserData()' return 'Data' и вызовите' getUserData() 'в фоновом потоке, например' doInBackground() '' AsyncTask'. Там вы можете выполнить остальную часть своей работы, прежде чем обновлять пользовательский интерфейс в главном потоке приложения. – CommonsWare
@CommonsWare; Если я удалю обратный вызов, переоснащение вызывает синхронный вызов веб-службы, и я получаю из этого действия исключение NetworkOnMainthreadException.Другой вариант, который у меня есть, - сделать переопределение веб-сервиса из нового потока в активности, но, как я уже упоминал, я избегаю управления потоками в своем коде. Я просто хочу знать, может ли Retrofit помочь мне обрабатывать как запрос, так и ответ, без необходимости использования потоков/сервисов/обработчиков/асинхронных задач. Благодаря ! – SlowAndSteady
«Если я удалю обратный вызов, модификация сделает синхронный вызов веб-службы, и я получу от ActivityOnMainthreadException». Если вы прочтете мой комментарий, я написал «вызов' getUserData() 'в фоновом потоке». «Я избегаю управления потоками в своем коде» - IMHO, что не будет эффективным подходом к разработке. Использование сторонней библиотеки для обработки конкретных проблем, связанных с потоками, прекрасно; говоря, что вы сами отказываетесь заниматься нитями, непрактично. – CommonsWare