前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AsyncTask的限制你了解吗?

AsyncTask的限制你了解吗?

作者头像
PhoenixZheng
发布2018-08-07 16:49:37
5890
发布2018-08-07 16:49:37
举报

平时我们要做一些耗时操作的时候,往往第一选择会选AsyncTask来进行。

那么面试时对于AsyncTask一般会提什么问题呢?下面我们来了解一下。

AsyncTask的使用

当我们用它来做异步操作的时候,它有两个接口可以使用

· execute(Params …)

· executeOnExecutor(Executor exec, Params …)

这两个方法有什么区别呢?

其实当我们用它来做单个的异步任务操作时没什么区别,意思就是说,比较当前更新UI只需要请求某个网络接口,或者只需要读某个单个文件,这时候用哪个都行。

但是当需要多个异步操作同时进行时,就只能用第二个接口了。

原因:

AsyncTask在默认情况下是串行操作的,也就是说它会执行完当前任务结束后才进行下一个任务。

其实这个限制是在3.0以后才有的,2.3的时候呢默认是会用5个线程进行并发操作。

AsyncTask的限制

明白了上面的区别,那么当我们需要多个异步操作同时进行时怎么办呢。这时候我们就需要用 executeOnExecutor(),

第一个参数可以指定不同的线程池方式,

1 无限制线程池的方式(但其实数量是有上限的,可以尝试一下)

代码语言:javascript
复制
new AsyncTask<String, Integer, String>() {

    @Override

    protected String doInBackground(String... strings) {

        return null;

    }

}.executeOnExecutor(Executors.newCachedThreadPool(),"");

2 限制为n个线程同时进行

代码语言:javascript
复制
new AsyncTask<String, Integer, String>() {

    @Override

    protected String doInBackground(String... strings) {

        return null;

    }

}.executeOnExecutor(Executors.newFixedThreadPool(n),"");
总结

所以面试时对于AsyncTask的问题应该有把握了吧,

· 首先它在3.0之后默认情况下是串行进行的

· 2.3的时候它默认5个线程并发进行

· 如果需要应对多个任务并发的时候,就需要用executeOnExecutor指定线程池的实现方式

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 平时我们要做一些耗时操作的时候,往往第一选择会选AsyncTask来进行。
    • AsyncTask的使用
      • AsyncTask的限制
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档