zoukankan      html  css  js  c++  java
  • android AsyncTask使用限制

        由于AsyncTask内部是使用线程池(ThreadPoolExecutor)来管理要处理的任务的,所以AsyncTask的弊端就非常明确了:要extcute的任务数量超过线程池最大容量时,必然会报错,导致FC。还有重要的一点就是,假如你需要立即执行一个网络请求获取数据,执行asynctask.execute()时,asynctask的doInBackground可能无法马上执行。原因是因为用线程池管理,而线程池有一定数量的核心线程(android2.3之前是5,android2.3之后是1),这些线程是可以马上运行的。还有一定数量的线程放在缓冲队列里,等有核心线程执行完毕之后再执行这些线程(到目前为止的版本,缓冲队列能放10个线程),然后有最大线程数量设定(128个)。打个比方,现在线程池中已经有128个线程等待处理,然后又execute进一个线程,这时候就会报错。再比如线程池已经有5个线程了(2.3之前),你再execute进一个,必然会等待有个核心线程处理完毕之后才会处理你新execute进的线程。

       所以,在使用asynctask的时候,一定要优化自己的代码,不要执行过多的异步任务。如果想要立即执行某个线程,可以new一个线程池,传递给executeOnExecutor(Executor exec, Params...params)。如:executeOnExecutor(Executors.newCachedThreadPool(),null); 可以自定义线程池的核心线程数量,缓存线程数量以及最大线程数量来处理。 还可以用Thread+Handler+message来处理。

  • 相关阅读:
    4、springboot之全局异常捕获
    3、springboot之热部署
    可重入锁
    2、springboot返回json
    1、springboot之HelloWorld
    [转]查询 SQL Server 系统目录常见问题
    设计模式原则详解
    [转]第二章 控制反转和依赖注入
    [转]Spring.Net介绍
    [转]Oracle High Water Level高水位分析
  • 原文地址:https://www.cnblogs.com/hithlb/p/3556457.html
Copyright © 2011-2022 走看看