看板 AndroidDev 關於我們 聯絡資訊
各位版友好, 最近在開發一支工具要對設備周邊的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://www.ptt.cc/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
kobe8112: 非UI的存取不要透過主執行緒執行。 05/25 15:19
kobe8112: Log印一印,你就知道到底哪些地方沒寫好,其實是主執行 05/25 15:21
kobe8112: 緒在做了,Logcat都會有Thread ID 05/25 15:22
zop: 執行次數的問題的話,我應該會加上收集一定次數再執行,或是 05/25 23:30
zop: 固定描述後執行,這樣應該可以緩解主執行緒的壅塞。 05/25 23:30
zop: 固定秒數,不是固定描述...笨選字。 05/25 23:31
kobe8112: 樓上大大建議的也是,更新頻率高有時不如更新資訊即時 05/25 23:46
erty0402: 感覺卡頓是因為系統送給你的命令無法即時執行。丟到han 05/27 20:05
erty0402: dler可以把工作放到Queue裡面執行。 要優化的簡單方法 05/27 20:05
erty0402: 就是不丟重複的工作給他,才不會讓UI thread 卡住 。 05/27 20:05
erty0402: 例如 第三秒你丟一個 然後下一秒又丟一個 這時你可以選 05/27 20:05
erty0402: 擇留舊的或是丟新的就好,看你的runnable怎麼設計跟使 05/27 20:05
erty0402: 用狀況 05/27 20:05