AndroidDev 板


LINE

http://slides.com/givemepass/android#/49 http://www.slideshare.net/rickwu12/ss-54297655 可以參考一下我寫的投影片, 也可以去買一本書 高效能執行緒 歐萊禮出版的 http://www.books.com.tw/products/0010675871 AsyncTask只是幫你封裝好跟UI Thread進行溝通, 但是更多情況是會被誤用的, 主要原因是AsyncTask共同維護一個Thread Pool, 當你很多個Task在執行超過核心數的Thread, 你剩下的Task就會面臨排隊的下場, 因此再使用AsyncTask的時候, 最好是自定義Thread Pool, 另外有可能其實你只是需要背景處理任務, 又不需要progress回報, 這時候使用AsyncTask有一種殺雞用牛刀的感覺, Thread(不推薦使用)、HandlerThread或者Executors.newSingleThreadExecutor() 會是比較好的選擇, 如果你需要任務排隊且不想並行處理, 那麼可以使用HandlerThread 如果你需要並行處理, 那麼可以使用newCachedThreadPool、newFixedThreadPool 以上搭配Handler(getMainLooper()).post就可以達到UI更新畫面 Future Pattern是一種領號碼牌的機制, 他會讓你任務送出去以後, 去做自己的事情, 等到任務處理完成再來處理畫面更新, Android很方便的把它跟ExecutorService綁在一起了, 讓你可以輕鬆操作Executors, 例如 InvokeAll: 同時並行多個Thread, 並且透過blocking來取回每一個Task的結果。 InvokeAny: 同時並行多個Thread, 只要有一個回傳成功, 則終止剩下的Task。 甚至可以使用ExecutorCompletionService 來控制每一個Task回傳的結果。 透過這些高階Thread機制的操作, 可以避免new太多Thread, 無法透過Thread來進行一些進階的操作或者寫出Callback Hell這種可怕的東西 生命週期受到控管...等等的好處 基本上我認為工具是先熟悉它再來擇情況選擇要使用哪種工具 才能達到這個工具的最大效益。 接著回答你的問題 : 寫了安卓半年多了,http請求下載一直都是使用Asyntask, : 最近主管突然要來 code refactor,他說 Asyntask不容易讀(每個 method 傳值從哪來 ? : 不懂)執意要用 FutureTask,網路上的範例根本找不到有跟 ui 互動的 futuretask啊? ? : 用futuretask下載檔案然後 broadcasts call view根本畫面很塞(都黑屏了)考慮用 hand : er做了,可是這樣跟 asyntask做法跟本一樣,而且官方還封裝的更好, : 請問版上的大大可以指導一下嗎? : 真的可以用 futuretask做出良好的 http請求嗎?謝謝!! 可以。 跟你在操控AsyncTask差不多 把網路串接的部分寫在background 等到任務回來再去通知UI更新畫面 至於怎麼寫可以參考看看我寫的範例 http://givemepass.blogspot.tw/2015/11/executorcompletionservice.html http://givemepass.blogspot.tw/2015/11/future-pattern-2.html 另外可以參考這段影片 是koji大在JCConf演講內容 剛看完的時候 收穫超多 https://www.youtube.com/watch?v=_EqitUOUpes&feature=youtu.be&t=0
你可以試著先實作看看 如果有疑問 可以考慮把你的程式碼貼出來給大家看看 這邊高手很多 應該可以幫你解決不少問題 -- posted from android bbs reader on my Nokia 3310 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.49.141
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1460552147.A.B71.html
1F:推 kewang: 這篇要mmmmmmmmmmmmmmmmm 04/13 23:58
2F:推 fightmz: 您好我有拜讀過您在部落格的文章,這篇您又做了更完整的 04/14 01:44
3F:→ fightmz: 統整,我還沒吸收完,先謝謝您,我的發問因為太急燥描述 04/14 01:44
4F:→ fightmz: 的太草率真抱歉 04/14 01:44
5F:推 fightmz: 連 asynctask都拼錯(請多見諒QQ 04/14 01:46
6F:推 fightmz: 我會先再嘗試寫寫看並修正我要的東西,畢竟是公司的專案 04/14 01:49
7F:→ fightmz: 不方便公開,如果有問題我會再整理好把問題和 code 放上 04/14 01:49
8F:→ fightmz: ,謝謝 04/14 01:49
9F:推 andy2151: 受益良多 感謝大大分享 04/14 09:16
10F:推 aiweisen: 推這篇 04/14 13:15
11F:→ firewolf: 如果用HandlerThread程式結束記得呼叫 quit(),否則會有 04/14 13:32
12F:→ firewolf: 一個 Thread在背景一直是在 running狀態,不會被GC回收 04/14 13:33
13F:推 lovelycateye: Rick 神! 04/14 19:56
14F:推 tn00364477: rick 神! 已跪 04/15 09:19
15F:→ givemepass: 樓上兩位神 別這樣... 04/15 15:03
16F:推 da135ha: 太棒惹~~~ 04/17 21:02
17F:→ kobe8112: 好神! 04/19 11:33
18F:推 yuzhichen: 感謝大大分享,觀念太重要! 04/20 17:12







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燈, 水草

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

TOP