问题标签 [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.
kotlin - Kotlin 1.5 频道 trySendBlocking() 与 trySend()
迁移到 Kotlin 1.5 后,我偶然发现了 Channel 的新trySendBlocking()
方法存在问题。
所以,我们有一个演员返回 a SendChannel<Command>
,Command
作为我们自己的数据类。
在 Kotlin 1.4 中向 actor 发送命令时,我们曾经像这样使用它的通道:
现在,建议在 Kotlin 1.5 中使用以下内容:
很好,但是我想知道为什么不使用trySend()
而不是trySendBlocking()
?有些事情让我摸不着头脑:
如果我们确定通道的容量足够大,并且参与者消耗它的速度足够快,那么通道就不会被填满,并且
trySend()
总是会成功。我们可以做这样的事情来解决通道可能已满的少数情况:do { val result = channel.trySend(command) } while (result.isFailure)
内部
trySendBlocking()
使用runBlocking()
阻塞整个线程。根据文档,runblocking()
“旨在将常规阻塞代码与以挂起样式编写的库连接起来,用于主要功能和测试”。但是这里它的使用方式超出了这个记录的用例。它可能会阻塞整个线程。我会认为这是一个坏主意?trySend()
线程安全吗?如果多个线程trySend()
在同一个通道上同时调用,会不会有麻烦?这就是我们喜欢的原因trySendBlocking()
吗?
谢谢
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
- 它是直接父母
这是崩溃日志