如何观察协程通道是否悬挂?我需要关闭它吗?

时间:2019-12-09 16:25:10

标签: kotlin kotlin-coroutines

有点背景:我的应用程序使用的屏幕组件可能包含多个用例模型。 这些用例模型在后台启动网络请求协程,并通过广播状态的通道与屏幕进行通信。

当用户导航到另一个屏幕时,将取消相应屏幕范围的作业,并销毁该屏幕。

我的第一个问题是:该频道发生了什么?我还是需要关闭它还是隐式关闭它?

我的第二个问题是:如果频道仍然挂在某处,试图广播到不再存在的接收器(屏幕),我该如何测试/观察自己?

1 个答案:

答案 0 :(得分:0)

在更仔细地阅读了文档之后,我认为解决方案是在怀疑挂起的通道上调用OnClose。

例如:

channel.invokeOnClose {
    print("channel closed")
}

然后可以运行该应用程序,并开始导航到不同的屏幕。如果显示“通道已关闭”消息,则表示一切正常,否则表示该通道已挂起。

在我的情况下,通道未关闭,因此我需要在适当的生命周期位置调用channel.close()。