gpt4 book ai didi

安卓 : Retrofit Callback success and failure executed asynchronously?

转载 作者:行者123 更新时间:2023-11-29 20:59:39 27 4
gpt4 key购买 nike

今天我只是在做我们自己的 Jake Wharton 对 Retrofit 的一些研究,所以我做了这样的事情

RetroClass.getClient().getSomeData(param, new Callback<Model>(){

@Override
public void failure(...){/*blah*/}

@Override
public void success(Model response, Response notUsed)
{
try
{
Thread.sleep(10000);
}
catch(Exception e){e.pST();}
}});

我预计会出现 ANR,但流程执行良好,Jake Wharton 在这篇文章中提到 Does Retrofit make network calls on main thread?“正如答案中所述,如果您使用第二种模式(最后一个参数作为回调),则请求是异步完成的,但回调是在主线程上调用的。默认情况下,Retrofit 为这些请求使用线程池。”

回调是在主线程上执行的,这里发生了什么,有什么见解吗?为什么 Thread.sleep() 不会在这里引起 ANR...?我很困惑....

最佳答案

默认情况下,Android 平台使用的 Callback ExecutorMainThreadExecutor .

确保在创建 RestAdapter 时没有通过执行类似这样的操作来覆盖默认实现

RestAdapter restAdapter = new RestAdapter.Builder()
.setExecutors(new MyHttpExecuter(), new MyCallbackExecutor()) { // watch out for this
.build()

如果您通过设置自己的方式覆盖默认的 Callback Executor,那么您将不会获得默认行为。

关于安卓 : Retrofit Callback success and failure executed asynchronously?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26496686/

27 4 0