Android取消异步调用

Posted

技术标签:

【中文标题】Android取消异步调用【英文标题】:Android cancelling async call 【发布时间】:2013-01-02 08:55:27 【问题描述】:

异步调用非常棒,似乎所有使用 Quickblox android SDK 的调用都是异步的,因此可以从主 ui 线程轻松实现。

但我需要能够中止对服务器的调用,因为我的调用是由同步适配器进行的,并且可以在进程中间取消或中止。

【问题讨论】:

【参考方案1】:

您可以在 Android SDK 中禁用异步调用 - 请查看 Synchronous requests are available

并将此调用包装在您自己的异步任务或其他东西上。

然后你就可以取消查询了

【讨论】:

谢谢,我知道这个选项,但是根据文档,它不应该用于生产产品,我更喜欢使用带有中止信号的异步功能。 不,如果您是一名优秀的技能开发人员 - 您可以使用它。同步查询会产生 ANR,因此请注意这一点 有趣的是,这仍然让我处于这样的位置,即一旦拨打电话,我需要等待通话完成才能中止它。我的下一个问题是您使用什么 Web 客户端进行呼叫(UrlConnection/HttpDefaultClient)? 我们正在使用 DefaultHttpClient 我们将在下一个版本中添加取消查询的机会。我们将在下周 2 内发布新版本的 Android SDK【参考方案2】:

Android SDK 0.7 发布http://quickblox.com/blog/2013/01/android-sdk-0-7/

现在只需使用此代码取消查询:

QBRequestCanceler canceler =  QBUsers.getUser(37823232, new QBCallbackImpl() 
    @Override
    public void onComplete(Result result) 
         if (result.isSuccess()) 
               QBUserResult qbUserResult = (QBUserResult) result;
               System.out.println(">>> User: " + qbUserResult.getUser().toString());
          else 
               handleErrors(result);
         
    
);

...    

// cancel if need
canceler.cancel();

【讨论】:

以上是关于Android取消异步调用的主要内容,如果未能解决你的问题,请参考以下文章

浅谈android中异步加载之"取消异步加载"二

ASIHTTPRequest取消异步请求

如何取消 useEffect 清理函数中的所有订阅和异步任务?

FutureFutureTask类解析

Kotlin 协程Flow 异步流 ⑦ ( 调用 FlowCollector#emit 发射元素时自动执行 Flow 流的取消检测 | 启用检测 Flow 流的取消cancellable函数 )

Kotlin 协程Flow 异步流 ⑦ ( 调用 FlowCollector#emit 发射元素时自动执行 Flow 流的取消检测 | 启用检测 Flow 流的取消cancellable函数 )