Re: [問題] ListView非同步更新的實作

看板AndroidDev作者 (i want to be one)時間14年前 (2011/01/25 21:50), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/4 (看更多)
※ 引述《quare96 (光怪鹿離)》之銘言: : 開發層: 應用 : 問題: : 問題的起頭只是因為我剛開始寫了一個需要接API並用ListView輸出的小程式, : 可是隨後我發現只要行動網路不夠穩的時候連接API會讓整個程式畫面在輸出 : 前暫時卡住。 : 於是稍微檢視一下,問題主要出現在我把查詢動作寫在onCreate中, : 這麼一來就代表了他會等到查詢動作結束後才會輸出畫面, : 我稍微參考了一下官網的LifeCycle,提到Activity在走到onStart時代表了 : 畫面已經輸出,於是我把查詢動作移進了onStart.... : 不過結果是一樣的,查詢動作還是跑在畫面輸出前 : 接著我在逛了一下官方的開發者論壇,有人提到了因為Activity從onCreate到 : onDestroy基本上是同一個執行緒在處理,所以無論怎麼移原則上都沒辦法改變 : 這個結果,建議分裂出一個執行緒同步去處理 : so,我就乖乖的照著做了,New了一個Thread去處理,把查詢寫在run裡面之後 : (Thread.start()擺在onCreate中) : 開斷點debug下去看,順序是有達到我的要求.. : 不過問題來了,查詢完要將結果寫入ListView時它竟然跳出Exception!!! : 我看了一下錯誤訊息...是一串英文(廢話) 大意是說不能用多出來的執行緒去 : 操作原本Layout上的物件 : 看到差點沒翻桌了...有人能給點建議嗎? : 參考: 官網文件及論壇 : 補充說明: 其實用BuittonClick去觸發更新ListView也不是不行啦...但就是有種 : 輸掉的感覺XD 文件有說 不能用非ui thread去改ui 你應該在你的query thread裡執行 runOnUiThread(new Runnable() { public void run() { // modify ListView object } }); 這就不會有Exception了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.87.144

01/26 09:41, , 1F
感謝建議^^ 我試試看
01/26 09:41, 1F
文章代碼(AID): #1DFjKfqy (AndroidDev)
文章代碼(AID): #1DFjKfqy (AndroidDev)