В каком случае нужно выполнять http-запрос в главном потоке?
Здравствуйте.
Retrofit если я правильно понял позволяет делать запросы как в главном потоке(метод execute) так и не в главном(метод enqueue). Возможно я путаю термины, имею в виду что execute это вроде как блокирующий вызов, а enqueue нет. Несколько раз натыкался на утверждение, что запросы нельзя выполнять в главном потоке. Вопрос заключается в том, что если выполнять запросы в главном потоке нельзя, то зачем в Retrofit есть метод, выполняющий их в главном потоке?
Андроид не позволяет выполнять запросы в ui потоке, никакие. Без исключений.
Retrofit можно использовать не только для Android, но и для любых java программ, а там запросы в главном потоке допустимы.
В андроиде можно создать свой поток и в нём выполнить блокирующий запрос.
orbit070, illuzor, конечно же разница есть, и большая. Создание потока это дорого, если делать это руками, можно сильно обжечься. enqueue использует пул потоков. Потоки надо join'ить отдельно. Вообще управлять сырыми потоками это сложно.
Немного оффтопа, network операции в UI потоке выполнять все-таки можно, есть даже 2 способа: targetApi=10, отключить проверку в StrictMode. НО! делать так конечно же не стоит.
Денис Загаевский, скажите пожалуйста, получается для http-запросов нужно использовать enqueue, а штуки вроде AsyncTask, загрузчиков и прочего нужно использовать для фоновых задач не требующих выхода в интернет?
Upd: Возможно неправильно выразился, не фоновых задач, а задач которые не должны выполняться в главном потоке (например запись в локальную базу данных).