博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android AsyncTask使用限制
阅读量:6897 次
发布时间:2019-06-27

本文共 753 字,大约阅读时间需要 2 分钟。

    由于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来处理。

 

转载于:https://www.cnblogs.com/hithlb/p/3556457.html

你可能感兴趣的文章
最大后验估计(map)——转自可乐LL
查看>>
【翻译】热门支持技巧
查看>>
疯狂ios讲义之实现游戏逻辑(3)
查看>>
JFreeChart开源图表组件在Java开发中的应用(二)
查看>>
linux中如何查询端口被占用的情况
查看>>
6425C-Lab14 域服务的连续性
查看>>
Logminer实战
查看>>
桌面虚拟化之PCoIP访问协议会话统计功能
查看>>
在.NET开发中的单元测试工具之(1)——NUnit
查看>>
Oracle 多表 连接 顺序 与 性能关系 测试
查看>>
MFCProperty
查看>>
社区、标签-jsp中获取状态怎么写?-by小雨
查看>>
jquery UI datepicker时间控件的使用
查看>>
textarea服务器控件
查看>>
找出给定字符串中出现最多的字符和次数
查看>>
jdbctempleate 执行postgres 数据库存储过程返回结果集
查看>>
数组排序希尔排序算法知识总结
查看>>
poj 1511 Invitation Cards
查看>>
微信-心跳机制
查看>>
元素和语义化
查看>>