Android AsynTask 与Thread 或线程池 使用分析

做Android的都知道, AsynTask 就是google 给我提供的一个在另一个线程 执行任务的工具.
从某种层面上将 , 他就是实现了 java 里面的Thread 的功能

但是经常在网上看到说, 推荐使用AsynTask 少用Thread
这是为什么? 

我也看了下 AsynTask 的源码 其实挺简单的,
里面有两个 静态的线程池, 
一个是同步线程池, 该线程最多可同时执行128个线程
一个是顺序执行的线程, 只有上一个线程执行完毕才执行下一个线程, 

我们在使用AsynTask 的时候可以选择不同的方式去执行 


new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... params) {
        return null;
    }
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);

public static final Executor THREAD_POOL_EXECUTOR
        = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
                TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

public static final Executor SERIAL_EXECUTOR = new SerialExecutor();


ok 基本明白了 AsynTask 的工作原理
那么为什么推荐使用AsynTask呢?

原因有:
开辟线程是很费时间的, 所有用线程池会好一些

那为什么不自己整一个线程池呢?
其实也可以自己整一个线程池, 但是自己如果管理的不好也是会造成一些问题,
看过一些代码, 在一些逻辑处理的类中, 都new 了一个线程池, 这个我们在执行线程的时候,看似是在使用线程池, 没有单独的new 线程, 但是new 了很多线程池 这个难免也 很耗性能


问了认识的大牛, 他们说他们公司规定 线程都用AsynTask , 不能自己new Thread 或new线程池
这样是为了在性能分析的时候方便一些, 他们之的代码也是很多自己new的Thread 后面在做性能优化的时候
看多很多线程乱七八糟 ,后面都规定使用 AsynTask 就规范很多了

还有一点确实好, 那就是在使用AsynTask 确实不自己随意的new Thread 节省一些性能


关于线程分析, 也向那位大牛学到了一些, 就是使用DDMS工具 



最后会生成这样的线程数据: 



更深入的可以参考这边文章:

关于AsynTask 更深入的分析可以参考下面文章:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值