改造是否在主线程上进行networking调用?

我正在尝试在Android上探索Retrofit + OkHttp。 以下是我在网上find的一些代码:

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

如果我不使用执行者服务,我的代码是否会在主线程上运行? 我是否应该在新线程中进行Web请求?

Solutions Collecting From Web of "改造是否在主线程上进行networking调用?"

返回值的方法是同步的。

 @GET("/user/{id}/asset") Asset getUserAsset(@Path("id") int id); 

要做到这一点asynchronous所有你需要的是添加一个callback。

 @GET("/user/{id}/asset") void getUserAsset(@Path("id") int id, Callback<Asset> cb); 

希望这可以帮助。

问候!

可以为同步或asynchronous执行声明更新方法。

具有返回types的方法将被同步执行。

 @GET("/user/{id}/photo") Photo getUserPhoto(@Path("id") int id); 

asynchronous执行要求方法的最后一个参数是Callback

 @GET("/user/{id}/photo") void getUserPhoto(@Path("id") int id, Callback<Photo> cb); 

在Android上,callback将在主线程上执行。 对于桌面应用程序,callback将在执行HTTP请求的同一线程上发生。

Retrofit还集成了RxJava来支持返回types为rx.Observable

 @GET("/user/{id}/photo") Observable<Photo> getUserPhoto(@Path("id") int id); 

可观察的请求是asynchronous订阅的,并在执行HTTP请求的同一个线程上观察到。 在不同的线程(例如Android的主线程observeOn(Scheduler)Observable返回的Observable上的observeOn(Scheduler)

注意:RxJava集成是实验性的。