美文网首页Android开发
AsyncTask的使用限制

AsyncTask的使用限制

作者: BeJack | 来源:发表于2017-02-09 16:05 被阅读0次

本文总结自Android实战技巧:深入解析AsyncTask

AsyncTask的两种执行方式

  • execute(Params... params)
    Android2.3以前的版本
    核心线程数 = 5,同时并发执行5个任务,超过5个则放入缓存队列
    Android2.3以前的版本
    Android 3.0以后的版本
    核心线程数 = 1,只能一个一个任务进行,超过一个则放入缓存队列
    Android 3.0以后的版本
  • executeOnExecutor(Executor exec, Params... params)
    Android 3.0以后新增的可自定义线程池的执行方式

executeOnExecutor中Executor 的四种常用参数

  • Executors.newCachedThreadPool()
    未设置限制,可并发多个任务的线程池(据说线程上限为128个,未验证)
  new AsyncTask<String, Integer, String>() {
            @Override
            protected String doInBackground(String... strings) {
                return null;
            }
        }.executeOnExecutor(Executors.newCachedThreadPool(),"");
9个线程并发
  • Executors.newFixedThreadPool(n)
    设置并发n个任务的线程池
        new AsyncTask<String, Integer, String>() {
            @Override
            protected String doInBackground(String... strings) {
                return null;
            }
        }.executeOnExecutor(Executors.newFixedThreadPool(7),"");
线程数量为7
  • AsyncTask.SERIAL_EXECUTOR
       new AsyncTask<String, Integer, String>() {
            @Override
            protected String doInBackground(String... strings) {
                return null;
            }
        }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR,"");

效果和直接使用execute一致

       new AsyncTask<String, Integer, String>() {
            @Override
            protected String doInBackground(String... strings) {
                return null;
            }
        }.execute("");
  • AsyncTask.THREAD_POOL_EXECUTOR
    效果和Executors.newCachedThreadPool()一致
 new AsyncTask<String, Integer, String>() {
            @Override
            protected String doInBackground(String... strings) {
                return null;
            }
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"");

相关文章

网友评论

    本文标题:AsyncTask的使用限制

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