Retrofit 是否在主线程上进行网络调用?
题
我正在尝试在 Android 上探索 Retrofit+OkHttp。这是我在网上找到的一些代码:
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
如果我不使用执行程序服务,我的代码会在主线程上运行吗?我应该在新线程中发出网络请求吗?
解决方案
返回值的方法同步。
@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);
.
要做异步,您需要的只是添加回调。
@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);
.
希望这有帮助。
问候!
其他提示
Retrofit 方法可以声明为同步或异步执行。
具有返回类型的方法将同步执行。
@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 集成是实验性的。
不隶属于 StackOverflow