[问题] 单向绑定不断新增资料导致app卡顿

楼主: Dong0129 (阿东跟上面讲的情况一样b)   2021-05-25 15:15:06
各位版友好,
最近在开发一支工具要对设备周边的host进行传输,并将收到的结果印在设备上,
一开始在xml里将TextView单向绑定到ObservableField<String> message,要增加印出的
讯息处理如下,
message.set(message.get()+newMessage);
从传输到增加资料到message过程都写在另一个Thread处理,
但执行次数一多,会看到log讯息提示在main thread做太多事情,且app开始卡顿,
后来直接透过Handler,透过binding.layoutId.TextViewId找到目标TextView并用append
函式将讯息印出,不会有先前卡顿的问题...
请问为什么会有这样的差别呢?如果要用原先message.set(message.get()+newMessage);
的方式,该怎么处理才可以避免app卡顿呢?
作者: kobe8112 (小B)   2021-05-25 15:19:00
非UI的存取不要透过主执行绪执行。Log印一印,你就知道到底哪些地方没写好,其实是主执行绪在做了,Logcat都会有Thread ID
作者: zop (ㄞ肝ㄞ肝~一元二十罐~)   2021-05-25 23:30:00
执行次数的问题的话,我应该会加上收集一定次数再执行,或是固定描述后执行,这样应该可以缓解主执行绪的壅塞。固定秒数,不是固定描述...笨选字。
作者: kobe8112 (小B)   2021-05-25 23:46:00
楼上大大建议的也是,更新频率高有时不如更新资讯即时
作者: erty0402 (缺副驾驶)   2021-05-27 20:05:00
感觉卡顿是因为系统送给你的命令无法即时执行。丢到handler可以把工作放到Queue里面执行。 要优化的简单方法就是不丢重复的工作给他,才不会让UI thread 卡住 。例如 第三秒你丢一个 然后下一秒又丢一个 这时你可以选择留旧的或是丢新的就好,看你的runnable怎么设计跟使用状况

Links booklink

Contact Us: admin [ a t ] ucptt.com