android-studio - 虽然循环会阻止 UI 并且不会通过 Android Studio 中的按钮退出
问题描述
一个 while 循环阻止了我的应用程序的 UI 显示,所以我没有机会按下取消按钮来摆脱它。此外,如果我能够通过从 TextToSpeech OnInitListener 块调用设置函数来显示 UI,我仍然无法注册按钮按下并退出。
为什么会发生这种情况?如何获得正常的、非阻塞的 while 循环行为,我可以通过 UI 中的取消按钮单击按钮退出?
这个 onCreate根本不显示 UI
class MainActivity : AppCompatActivity() {
lateinit var myTestClass: TestClass
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupTheTestClass()
}
当我在 TextToSpeech OnInitListener 中调用 setupTheTestClass() 时,此 onCreate显示 UI ,但不会注册按钮按下以让我退出 while 循环
class MainActivity : AppCompatActivity() {
lateinit var myTestClass: TestClass
lateinit var mTTS:TextToSpeech
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mTTS = TextToSpeech(applicationContext, TextToSpeech.OnInitListener { status ->
setupTheTestClass()
})
}
fun setupTheTestClass()
{
myTestClass = TestClass(cancelBtn)
myTestClass.setupOnClickForButtons()
myTestClass.testWhileLoop() // blocks UI in first example
}
class TestClass(val cancelBtn: Button) {
var running: Boolean = true
fun setupOnClickForButtons()
{
cancelBtn.setOnClickListener {
running = false
println("no longer running")
}
}
fun testWhileLoop() {
while (running == true) {
println("running")
}
}
}
解决方案
将 testWhileLoop() 函数放在协程中似乎有效
fun setupTheTestClass()
{
myTestClass = TestClass(cancelBtn)
myTestClass.setupOnClickForButtons()
// myTestClass.testWhileLoop()
GlobalScope.launch{
myTestClass.testWhileLoop()
}
}
推荐阅读
- r - geom_bar 总结了 y 值:这可以改变吗?
- asp.net-mvc - 如何用剃刀删除文本文件中的一行
- javascript - JavaScript/PHP:跟踪用户在网页上的视频观看时间?
- javascript - contenteditable 中的 ExecCommand 在 Ionic5 中无法正常工作
- javascript - Fullcalendar v5 删除按钮点击的所有事件
- javascript - 如何在反应中更新文本框的默认值
- python - 大写字符串和小写字符串的比较?
- javascript - 电子通知 API“点击”事件不起作用
- google-chrome-extension - 是否可以在安装之间以某种方式保留 Web 扩展设置?
- reactjs - 将 React 组件作为其他数据数组的一部分传递?