2016-12-28 112 views
6

这可能以前曾被问过,但似乎没有一个可行的答案。我们使用Retrofit 2.1.0异步回调,它在后台线程上执行请求。但是,当接收到响应onResponse时,它会在应用程序的UI线程上发回,而不管我是否将回调放在新线程中,迫使它不使用UI。Retrofit 2在后台线程回调onResponse

因为我们不想因任何原因阻塞主UI线程,是否有可能在后台返回响应?

如果上述不可行,是否建议将单独的线程从响应中踢出以避免UI线程阻塞?

任何帮助将不胜感激。谢谢!

回答

12

在构建Retrofit实例时,您可以指定一个特定的执行程序,以便在其上运行回调。这是一个使用回调函数SingleThreadExecutor的示例。

Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(/* your url */) 
     .callbackExecutor(Executors.newSingleThreadExecutor()) 
     // other builder options... 
     .build();