问题标签 [kotlin-1.5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
744 浏览

kotlin - Kotlin 1.5 频道 trySendBlocking() 与 trySend()

迁移到 Kotlin 1.5 后,我偶然发现了 Channel 的新trySendBlocking()方法存在问题。

所以,我们有一个演员返回 a SendChannel<Command>Command作为我们自己的数据类。

在 Kotlin 1.4 中向 actor 发送命令时,我们曾经像这样使用它的通道:

现在,建议在 Kotlin 1.5 中使用以下内容:

很好,但是我想知道为什么不使用trySend()而不是trySendBlocking()?有些事情让我摸不着头脑:

  1. 如果我们确定通道的容量足够大,并且参与者消耗它的速度足够快,那么通道就不会被填满,并且trySend()总是会成功。我们可以做这样的事情来解决通道可能已满的少数情况:

    do { val result = channel.trySend(command) } while (result.isFailure)

  2. 内部trySendBlocking()使用runBlocking()阻塞整个线程。根据文档,runblocking()旨在将常规阻塞代码与以挂起样式编写的库连接起来,用于主要功能和测试”。但是这里它的使用方式超出了这个记录的用例。它可能会阻塞整个线程。我会认为这是一个坏主意?

  3. trySend()线程安全吗?如果多个线程trySend()在同一个通道上同时调用,会不会有麻烦?这就是我们喜欢的原因trySendBlocking()吗?

谢谢

0 投票
2 回答
80 浏览

android - 正确销毁 WebView 时的 Kotlin 1.5.0 NPE

我的应用程序按照以下(从这里)销毁 webviews。

这一直运行良好,直到将 Kotlin 版本从 1.4.32 升级到 1.5.0 使用 Kotlin 1.5.0,webView 变量在 parentConstraintLayout.removeView(webView)执行后变为 null。clearHistory()引发 NPE 并且应用程序崩溃。webView并且parentConstraintLayout都在 XML 中声明。

我已经验证其他一切都相同,Kotlin 1.5.0 / 1.5.20 会出现问题,但 1.4.32 不会出现问题。为什么升级 Kotlin 会发生这种情况,我能做些什么来解决它?

这是webView

并且parentConstraintLayout- 它是直接父母

这是崩溃日志