[問題] 單向綁定不斷新增資料導致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