最近在写一个单android的 Flutter plugin 在提取系统内安装Apk时出现了问题。
小一点的几十m的用的很欢,几乎没任何使用问题。BUT!!
当我要拿这个东西的时候
问题来了!
耗时!UI卡顿!卡得死死的!!
然后我就想着 多线程 再然后
好了,进入正题:
当我直接使用 Thread
于是
大概意思就是,UI相关操作只允许在主线程中操作。
UI操作!Android不是有一个Handler可以在子线程执行完成后通知UI更新嘛?
想到这里,我又屁颠屁颠的写了Handler
Java代码:
dart代码:
抱着侥幸的心理,我运行了一遍!
诶!可以!app没崩溃!也没卡顿!
为什么这个方法可以呢?我大概总结如下:
- Flutter中只是一个单线程队列操作,有耗时作业也是在进入身后队列等待。(那么是不是可以理解为用户始终都是在UI线程上操作)。
- 然鹅,在Andoird中,并没有这种异步,同时Android又不允许直接在子线程中更新UI,于是便有了消息机制(Handler),子线程执行完毕向Handler发送消息,handler通知UI更新。
既然可以Flutter在调用android原生方法时使用的是UI操作,Android又是通过Handler通知UI更新,我的理解就是下面这个图了。
个人理解,有误望纠!