我在做一个功能,就是通过展示图片的形式,播放PPT,来在主界面的图片显示控件上,播放视频。
但是直接在 imageView 里面写逻辑,编译无法通过。android studio报错说是界面控件的操作时间超时。
实际上是这样,你不能在主进程中部署需要执行时间很长的逻辑,这样会导致前台各种控件卡顿。无法操作。
实际上的操作应该是通过:
在控件中比如按钮中,唤起后台进程,然后通过消息机制传递给主进程的消息处理handler。
然后再通过消息处理函数来更改控件的属性。
开启后台进程并使用msg
thread {
while (条件) {
val msg = Message() 我感觉 上一条消息发送之后,好像就已经消耗掉了。并不是说类似于开一个结构体疯狂发送替换数据就行那种。
所以这里每次新建一个消息?
msg.what = 消息标志(int类型的常量)
msg.obj = 要发送的内容
handler.sendMessage(msg)
}
}
通过消息处理更新控件
在主activity开始的地方:
private val handler = object : Handler(Looper.getMainLooper()){
override fun handleMessage(msg: Message) {
when(msg.what){
消息标志 -> {
对控件进行的操作。
实际上是可以进行各种操作。
}
}
}