Re: [問題] 請問執行緒
※ 引述《givemepass (λ)》之銘言:
: 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
: 你可以試著先實作看看
: 如果有疑問 可以考慮把你的程式碼貼出來給大家看看
: 這邊高手很多 應該可以幫你解決不少問題
其實我的想法跟您相反,怕忘記我先寫下來我的看法
1下載檔案我只需要http請求一次,所以只需要開一個執行緒,下載期間,需要進度條顯
示,我在網路上看需要進度條 ui 的大多是 asynctask 做,沒看過用 futuretask
當然我嘗試過在 futuretask的 callable 裡面用 runOnUiThread 去跑進度條,結果是不
佳的,可能本身畫面已經塞住,所以看不到效果?
另外是想問,畫面塞住黑屏沒動作,memory正常,沒有 crash,
我大概猜是執行緒的問題 ,要知道詳細哪裡有問題要怎麼去 debug? (android studio)
網路上搜中文關鍵字 黑屏 或是 塞住 只有看到一般手機使用者發問,我不曉得就開發者
的角度該怎麼下這類正確的關鍵字?
2專案 ui 顯示已經說下載期間不建議做其他事,就我認為用futuretask反而才像是殺雞
用牛刀的感覺,不過主管很堅持要這樣寫,我經驗不足暫時還無法體會這樣寫的意義在哪
?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.142.28
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1460597101.A.AA6.html
推
04/14 10:20, , 1F
04/14 10:20, 1F
→
04/14 10:20, , 2F
04/14 10:20, 2F
→
04/14 10:23, , 3F
04/14 10:23, 3F
→
04/14 10:23, , 4F
04/14 10:23, 4F
→
04/14 12:52, , 5F
04/14 12:52, 5F
→
04/15 00:59, , 6F
04/15 00:59, 6F
→
04/15 01:00, , 7F
04/15 01:00, 7F
→
04/15 01:01, , 8F
04/15 01:01, 8F
→
04/16 00:54, , 9F
04/16 00:54, 9F
→
04/16 00:55, , 10F
04/16 00:55, 10F
→
04/16 01:32, , 11F
04/16 01:32, 11F
→
04/16 01:32, , 12F
04/16 01:32, 12F
→
04/16 01:32, , 13F
04/16 01:32, 13F
→
04/16 01:54, , 14F
04/16 01:54, 14F
→
04/16 01:54, , 15F
04/16 01:54, 15F
→
04/16 01:54, , 16F
04/16 01:54, 16F
→
04/16 01:54, , 17F
04/16 01:54, 17F
→
04/19 00:13, , 18F
04/19 00:13, 18F
→
04/19 08:52, , 19F
04/19 08:52, 19F
→
04/19 08:52, , 20F
04/19 08:52, 20F
→
04/19 10:46, , 21F
04/19 10:46, 21F
→
04/19 10:48, , 22F
04/19 10:48, 22F
→
04/19 10:51, , 23F
04/19 10:51, 23F
→
04/19 10:51, , 24F
04/19 10:51, 24F
討論串 (同標題文章)
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章