Модернизация сети делает сетевые вызовы в основном потоке?
Я пытаюсь изучить Retrofit + OkHttp на Android. Вот код, который я нашел в Интернете:
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
Если я не использую службу-исполнитель, будет ли мой код запущен в основном потоке? Должен ли я делать веб-запросы в новом потоке?
Ответы
Ответ 1
Метод, возвращающий значение, выполняет его синхронно.
@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);
Чтобы сделать это Асинхронное все, что вам нужно, это добавить обратный вызов.
@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);
Надеюсь, что это поможет.
Привет!
Ответ 2
Методы переоснащения могут быть объявлены как для синхронного, так и для асинхронного выполнения.
Метод с возвращаемым типом будет выполняться синхронно.
@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);
Асинхронное выполнение требует, чтобы последний параметр метода был Callback
.
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
В Android обратные вызовы будут выполняться в основном потоке. Для настольных приложений обратные вызовы будут выполняться в том же потоке, который выполнял HTTP-запрос.
Retrofit также интегрирует RxJava для поддержки методов с возвращаемым типом rx.Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
Наблюдаемые запросы подписываются асинхронно и наблюдаются в том же потоке, который выполнял HTTP-запрос. Чтобы посмотреть на другой поток (например, основной поток Android), вызовите observeOn(Scheduler)
в возвращенном Observable
.
Примечание. Интеграция RxJava является экспериментальной.