Подтвердить что ты не робот

Модернизация сети делает сетевые вызовы в основном потоке?

Я пытаюсь изучить Retrofit + OkHttp на Android. Вот код, который я нашел в Интернете:

RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();

Если я не использую службу-исполнитель, будет ли мой код запущен в основном потоке? Должен ли я делать веб-запросы в новом потоке?

4b9b3361

Ответ 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 является экспериментальной.