美文网首页
AsyncTask相关

AsyncTask相关

作者: 聪聪的豆芽 | 来源:发表于2016-07-25 16:29 被阅读14次

    参考:

    http://blog.csdn.net/lmj623565791/article/details/38614699
    http://blog.csdn.net/singwhatiwanna/article/details/9272195

    原理:

    666

    18行:设置当前AsyncTask的状态为RUNNING,上面的switch也可以看出,每个异步任务在完成前只能执行一次。
    20行:执行了onPreExecute(),当前依然在UI线程,所以我们可以在其中做一些准备工作。
    22行:将我们传入的参数赋值给了mWorker.mParams ,mWorker为一个Callable的子类,且在内部的call()方法中,调用了doInBackground(mParams),然后得到的返回值作为postResult的参数进行执行;postResult中通过sHandler发送消息,最终sHandler的handleMessage中完成onPostExecute的调用。
    23行:exec.execute(mFuture),mFuture为真正的执行任务的单元,将mWorker进行封装,然后由sDefaultExecutor交给线程池进行执行。

    对比Handler+Thread

    1、Handler+Thread

    麻烦之处在于UI的更新牵涉较多,单个异步后台显得代码过多,而且频繁的new thread也不好。但是多个后台比较清晰,可控性好。

    2、AsyncTask

    比较轻量级,单个后台可用,系统封装好的UI更新,但是不可太耗时(最多几秒)。
    但是由于版本的问题,1.6之前,3.0以后是队列形式,中间版本是并发(最大支持128的并发,10个任务等待,即138个任务,超过则异常),但是也可强制开启多线程执行executeOnExecutor()

    相关文章

      网友评论

          本文标题:AsyncTask相关

          本文链接:https://www.haomeiwen.com/subject/tiggjttx.html