※ 引述《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反而才像是杀鸡
用牛刀的感觉,不过主管很坚持要这样写,我经验不足暂时还无法体会这样写的意义在哪
?