作者Dong0129 (阿东)
看板AndroidDev
标题[问题] 单向绑定不断新增资料导致app卡顿
时间Tue May 25 15:15:06 2021
各位版友好,
最近在开发一支工具要对设备周边的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卡顿呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.73.130.16 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1621926908.A.ACB.html
※ 编辑: Dong0129 (42.73.130.16 台湾), 05/25/2021 15:15:53
※ 编辑: Dong0129 (42.73.130.16 台湾), 05/25/2021 15:16:24
1F:→ kobe8112: 非UI的存取不要透过主执行绪执行。 05/25 15:19
2F:→ kobe8112: Log印一印,你就知道到底哪些地方没写好,其实是主执行 05/25 15:21
3F:→ kobe8112: 绪在做了,Logcat都会有Thread ID 05/25 15:22
4F:推 zop: 执行次数的问题的话,我应该会加上收集一定次数再执行,或是 05/25 23:30
5F:→ zop: 固定描述後执行,这样应该可以缓解主执行绪的壅塞。 05/25 23:30
6F:→ zop: 固定秒数,不是固定描述...笨选字。 05/25 23:31
7F:→ kobe8112: 楼上大大建议的也是,更新频率高有时不如更新资讯即时 05/25 23:46
8F:推 erty0402: 感觉卡顿是因为系统送给你的命令无法即时执行。丢到han 05/27 20:05
9F:→ erty0402: dler可以把工作放到Queue里面执行。 要优化的简单方法 05/27 20:05
10F:→ erty0402: 就是不丢重复的工作给他,才不会让UI thread 卡住 。 05/27 20:05
11F:→ erty0402: 例如 第三秒你丢一个 然後下一秒又丢一个 这时你可以选 05/27 20:05
12F:→ erty0402: 择留旧的或是丢新的就好,看你的runnable怎麽设计跟使 05/27 20:05
13F:→ erty0402: 用状况 05/27 20:05