AndroidDev 板


LINE

※ 引述《abcb1 (一票難求!)》之銘言: : 標題: [問題] Looper.loop() 可以改成 non block嗎 : 時間: Tue Aug 22 10:35:35 2017 : : 請問各位前輩 : 我目前想做的功能是 我開一個 thread : 可以接收 main thread 來的message做處理(轉成自己的指令格式用socket傳給server) : 同時也要監聽server是否有回應 : : 現在的問題是 我用Looper來收 main thread message : 但loop()當messgae queue沒東西會卡住 : 我希望做到的是 在Message queue沒東西時還能做其他的事 (像下面的架構) : : : private class ClientThread implements Runnable { : : @Override : public void run() { : : while(true) { : ...... : ...... : looper.loop() // 正常會卡住 : : ............. // 我想做的事 : } : } : : } : : 請問有辦法讓 loop non block嗎 : 我目前想到的另一個做法是把我要做的事 寫成 IdleHanlder 綁定到 message queue : 讓 queue空的時候去做我指定的事 : : 但還是想請問各位 : 1. loop() 有辦法 nonblock嗎 : 2. 或者有什麼其他建議的做法 我想這個問題應該很多人會遇到 : (專門開一個 thread 只能做meesgae 處理好像有點?) : : 希望大家能多給些意見 先在此感謝各位的回答 : : -- : Everything is allright : Tomorrow"ll be fine : : -- :



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.178.86
: ※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1503369340.A.212.html : → ssccg: looper就用來處理message queue的,有事要做就發到message 08/22 12:51 : → ssccg: queue就好幹麻要動looper? 08/22 12:51 : → ssccg: 專門一個thread處理message有點什麼? 08/22 12:52 : → ssccg: 嫌thread太閒就多發點message不就好了 08/22 12:55 : 推 KeySabre: 原po完全誤解looper用途吧 08/22 21:19 : → y3k: 你用Handler就好了 08/22 22:53 抱歉 補充一下我的想法 我looper會接收 main thread來的 message 然後走socket發指令給 server端 但同時也要監聽有沒有server端回來的 resposne 如果response也要包成message的話 我就要多開一個 thread專門去做監聽的動作 然後再包成 message丟回來 (應該是這樣沒錯?) 但我想把兩個thread的事情合在一個 thread裡 while (true) { 1.接收並處理 UI thread 送來的 messagee // 2.監聽有無response } 不知道這樣有解釋到我想問能不能有 non-block looper的疑問了? y3k: 你用Handler就好了 不好意思 y3k大 我剛學 android沒多久 這個敘述太簡單了 我不太理解你的意思 我的確是有 handler 去處理 message 但我的 Idlehandler 是透過 MessageQueue addIdleHandler(MessageQueue.Idlehandler) 去讓 looper在 queue沒 message的時候 做我要做的事 感謝各位的回答 希望能跟各位再討論一下 -- Everything is allright Tomorrow"ll be fine --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.178.86
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1503452032.A.D46.html
1F:→ ssccg: 你的想法有問題,while寫成那樣就是說一定要接到一個msg才 08/23 09:52
2F:→ ssccg: 輪到監聽,一定要監聽資料才處理下一個msg 08/23 09:53
3F:→ ssccg: 如果要用message處理機制達成non-blocking,本來就該用另一 08/23 09:56
4F:→ ssccg: 個thread監聽再發message,不然監聽這件事就會block thread 08/23 09:56
5F:→ kobe8112: 我會建議初學可以去翻些實體書,對Android的各種同步、 08/23 10:02
6F:→ kobe8112: 消息傳遞機制有大略的了解,再去依據需求到板上或 08/23 10:03
7F:→ kobe8112: Stack Overflow、CSDN等地方搜尋更深入的做法、討論, 08/23 10:04
8F:→ kobe8112: 一般剛接觸的朋友應該不會管到Looper去才對啊QQ 08/23 10:04
9F:→ ssccg: 如果監聽是用non-blocking的API,那更單純直接用Handler定 08/23 10:05
10F:→ ssccg: 期檢查有沒有新收到資料就好 08/23 10:05
11F:→ ssccg: 如果你真的就是要一送一收,block住等結果那就把送收都寫在 08/23 10:07
12F:→ ssccg: 同個handleMessage就好 08/23 10:08
13F:→ ssccg: 總之都不會需要動到Looper,Looper+MessageQueue就是用來讓 08/23 10:12
14F:→ ssccg: 在thread上做事變成event-driven/non-blocking,你要破壞這 08/23 10:22
15F:→ ssccg: 實作卻說目標是要達成non-blocking讓人無法理解... 08/23 10:22







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP