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取消异步调用的主要内容,如果未能解决你的问题,请参考以下文章
如何取消 useEffect 清理函数中的所有订阅和异步任务?
Kotlin 协程Flow 异步流 ⑦ ( 调用 FlowCollector#emit 发射元素时自动执行 Flow 流的取消检测 | 启用检测 Flow 流的取消cancellable函数 )
Kotlin 协程Flow 异步流 ⑦ ( 调用 FlowCollector#emit 发射元素时自动执行 Flow 流的取消检测 | 启用检测 Flow 流的取消cancellable函数 )