2016-12-28 108 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();