AsyncTask执行顺序
这几天,遇见个奇葩问题,记录一下。
在用AsyncTask的时候,new 出来的AsyncTask总是等了很久才执行到。
于是乎,想到了是不是前面已经有好几个AsyncTask的实例了,是不是线程优先级的问题呢?
在了解了以下知识后,发现AsyncTask默认总是先后执行的,除非调用AsyncTask.executeOnExecutor才是并发执行,不过此方法可能造成数据混乱,但是我的AsyncTask本来就是有先后顺序,而且有标示,所以以应该不会出现混乱的状况。
Notes:
1:
因为AsyncTask里面的内部handler和Executor都是静态变量,所以,他们控制着所有的子类。
2:
我们可以通过AsyncTask.execute()方法来调用系统默认的线程池来处理当前的任务,
系统默认的线程池用的是SerialExecutor.这个线程池控制所有任务按顺序执行。也就是一次只执行一条.
当前执行完了,才执行下一条.2.3平台以前是所有的任务并发执行,这会导致一种情况,就是其中一条任务执行出问题了,会引起其他任务出现错误.
3:
AsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)你也可以采用这个系统提供的线程池来处理你的任务
默认这个线程池是并发处理任务的,也就是不按顺序来.核心为5条,最大128条
4:
你也可以使用自定义的线程池,这样就可以即使的执行你的任务需求,而不是用系统的。因为用系统默认的线程池可以需要等待,它默认是按顺序执行(THREAD_POOL_EXECUTOR)或者最多执行5个(SerialExecutor).
自己使用自定义线程池方式如下:
new AsyncTask.executeOnExecutor((ExecutorService)Executors.newCachedThreadPool()).
5: 不要随意使用AsyncTask,除非你必须要与UI线程交互.默认情况下使用Thread即可,要注意需要将线程优先级调低.
从google官方文档你也可以看到,AsyncTasks should ideally be used for short operations (a few seconds at the most.)
AsyncTask适合处理短时间的操作,长时间的操作,比如下载一个很大的视频,这就需要你使用自己的线程来下载,不管是断点下载还是其它的.
参考:http://java.chinaitlab.com/base/919389.html
AsyncTask执行顺序的更多相关文章
- Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究
Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, ...
- MonoBehaviour Lifecycle(生命周期/脚本执行顺序)
脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...
- Unity中脚本的执行顺序总结(@WhiteTaken)
(Editor)以上是Unity官方文档中的截图,脚本在被挂载到物体上,会启用Editor的方法Reset. (Initialization)当执行脚本开始,初始化的过程中,依次执行的是Awake-& ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- Java学习笔记__异常机制_try_catch_finally_return执行顺序
package cn.xiaocangtian.Exception; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...
- 关于sql的执行顺序
标准sql的解析顺序为 1)FROM子句,组装来自不同数据源的数据 2)WHERE子句 基于制定的条件对记录进行筛选 3)GROUP BY 子句将数据划分为多个分组 4)使用聚合函数进行计算 5) 使 ...
- SQL 语句与性能之执行顺序
select * , t3.Name from t1 left join t2 on t1.sysno = t2.Asysno left join t3 on t3.sysno = t2.Bsysno ...
- 关于JavaScript预编译和执行顺序以及函数引用类型的思考
昨晚在对项目中的一部分做模块化处理的时候,遇到了一个问题,一个重新定义的function对一个通用类中的function进行赋值覆盖的时候,失败了.问题抽象出来是这样的: <script > ...
- JMeter专题系列(三)元件的作用域与执行顺序
1.元件的作用域 JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(conf ...
随机推荐
- mac与windows上部署使用Redis
windows下Redis安装 在Redis的官网下载页上有各种各样的版本,由于redis官网不支持windows,但是我们伟大的windows家族还是召唤了一群小伙伴开发了win版的redis.要在 ...
- CentOS安装Webmin
解析:Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作.目前 Webmin支持绝大多数的Unix系统,这些系统除了各种 ...
- centos 最小化安装后要做的事情
首先是配置网络 [root@bao-work-4 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 IPADDR=10.230.200.22GATEWA ...
- 限制 nuget 更新包的版本号
今天在搜索其它问题的时候,突然发现一个使用 nuget 的小技巧. 因为浏览器兼容性的问题,很多网站项目引用的 jQuery 组件版本需要保持在 2.0 以下,因为 2.0 以上需要现代浏览器的支持, ...
- IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
例如下面一段代码 var a = { x: 1, y: 2, }; alert(a.x); 如果在IE的兼容性视图(IE7文档模式)下,会报告下面的错误: SCRIPT1028: 缺少标识符.字符串或 ...
- Android-Bug:RecyclerView的item不能横向充满的问题
在使用 RecyclerView 的时候,出现了 item 不能横向充满屏幕的问题, 如下图所示: 解决办法:发现是在使用 Adapter 的时候,在 onCreateViewHolder() 方法的 ...
- Rsync启动停止脚本
网上找了个完善的rysnc启停脚本:http://linux5588.blog.51cto.com/65280/779000 rsync源码: [root@lanny d4]# cat rsync_s ...
- LeetCode: Integer to Roman 解题报告
Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be within t ...
- Android 启动后台运行程序(Service)
Android开发中,当需要创建在后台运行的程序的时候,就要使用到Service.Service 可以分为有无限生命和有限生命两种.特别需要注意的是Service跟Activities是不同的(简单来 ...
- fread和fwrite函数功能
fread和fwrite函数功能 用来读写一个数据块. 一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); ...