AsyncTask的版本差异及其与Thread的使用场景

/**
 *   AsyncTask相关总结
 *
 * 1 异步任务AsyncTask在不同Android版本的差异.
 *   该差异主要是Android2.3和Android3.0及其之后的差异
 *
 *   差异内容:
 *   在Android2.3中AsyncTask的调用可以并发执行.
 *   因为它在一个线程池中被调用.该线程池有5个核心线程,且最大线程数为128个.
 *   比如:同时启动10个任务,有5个任务能够立刻执行,另外5个任务则需等待;当有一个任务执行完毕后,第6个任务才会启动,以此类推.
 *   因为线程池中最大能存放的线程数是128个,当我们尝试去添加第129个任务时,程序会崩溃.
 *
 *   在Android3.0及其以后AsyncTask的调用在默认情况同时只能有1个任务在执行.
 *   在AsyncTask中采用了SerialExecutor,它很类似于SingleThreadExecutor,即线程池中只有一个线程的线程池.
 *   所以在2.3之后调用asyncTask.execute(params)方法,同时只能有1个任务在执行.待该任务执行完成后再执行下一个任务.
 *   那么可以修改该默认设置么?当然是可以的.
 *   可以调用方法asyncTask.executeOnExecutor(executor, params);
 *   第一个参数executor就设置为一个自己配置的线城池
 *
 * 2 AsyncTask和Thread的使用场景的区别
 *   AsyncTask简单灵活,不用考虑UI更新.但是要注意AsyncTask版本差异带来的问题,请参考上面的总结.
 *   当有大量的瞬时任务出现时应该考虑使用线程池,可以节省线程的创建和销毁的消耗
 *
 *
 *
 *   参考资料
 * 1 Nate的教程
 * 2 http://androidxref.com/4.0.4/xref/
 * 3 http://blog.csdn.net/guolin_blog/article/details/11711405
 * 4 http://blog.csdn.net/chenzujie/article/details/9247243
 *   Thank you very much
 *
 */
时间: 2024-08-02 04:12:44

AsyncTask的版本差异及其与Thread的使用场景的相关文章

kafka各版本差异

kafka各版本差异. kafka-0.8.2 新特性 producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率.producer请求会返回一个应答对象,包括偏移量或者错误信.这种异步方地批量的发送消息到kafka broker节点,因而可以减少server端资源的开销.新的producer和所有的服务器网络通信都是异步地,在ack=-1模式下需要等待所有的replica副本完成复制时,可以大幅减少等待时间. 在0.8.2之前,kafka删

BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法_javascript技巧

我用过的两个版本: v0.5.2-dev,0.4.5 这里针对于提交方法进行说明一下,如下代码: <script> $(function () { $("#addUserForm").bootstrapValidator({ submitHandler: function(validator, form, submitButton) { // 版本号0.4.5支持 // 版本号v0.5.2-dev不再支持submitHandler配置 } }).on("succe

阿里云播放器SDK的正确打开方式 | 版本差异与三大典型应用场景(二)

阿里云播放器SDK(ApsaraVideo for Player SDK)是阿里视频云端到云到端服务的重要一环,除了支持点播和直播的基础播放功能外,还深度融合视频云业务,支持视频的加密播放.安全下载.首屏秒开.低延时等业务场景,为用户提供简单.快速.安全.稳定的视频播放服务.本文衔接上文,从版本.功能和典型应用场景等几个方面来介绍阿里云播放器SDK. 不同版本的播放器SDK 阿里云播放器SDK提供基础播放器.高级播放器和UI播放器三层框架满足不同用户.不同业务场景需求,开发者可根据自己的业务需求

[MySQL 版本差异] 丢失frm文件之后drop database的不同结果分析

背景  今天在讨论frm丢失后drop database失败的问题.简单复现如下.假设test库中有两个表t1, t2,执行如下脚本: bin/mysql -uroot –socket=run/mysql.sock   -e " drop database if exists test2; create database test2; use test2; create table t1 like test.t1; create table t2 like test.t2; " rm

内核版本差异-LSM在linux内核版本2.6.22之后如何注册安全模块

问题描述 LSM在linux内核版本2.6.22之后如何注册安全模块 在2.6.22之前我们可以通过register_security(ops)注册安全模块,加载成功后就可以进行访问控制,而在版本较高的内核中,例如我用的3.4.70 调用register_security(ops)是不能成功的,而unregister_security()函数在security.c中是不存在的,请问这种情况下,如何注册安全模块以及如何撤销该模块? 最后还想问Linux内核这样改的原因是什么? 求高手讲解下,多谢

Red Hat Enterprise Linux 6 “桌面”、“工作站”、“服务器” 版本差异比较

Red Hat Enterprise Linux 6,共有三个版本.通过安装发现,所谓的"桌面"."工作站"."服务器"这三个版本的区别就在于它们默认安装软件库不一样.桌面版本默认安装的软件库主要面向一般的办公与娱乐:工作站版本默认安装集成了一些开发程序:服务器版默认情况下没有GUI(图形界面). 如果要定制安装,要选择下图中的"现在自定义".   上图,在这个选项中,如果选择"服务器",默认则不会安装X

Android 中文 API (101) —— AsyncTask

前言 本章内容是android.os.AsyncTask,版本为Android 2.3 r1,翻译来自"0_1",欢迎访问它的博客:"http://dev.10086.cn/blog/?32546",再次感谢"0_1" !期待你一起参与Android API的翻译,联系我over140@gmail.com.    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com/ Android中文翻译组:http

Android中通过AsyncTask类来制作炫酷进度条的实例教程_Android

AsyncTask (API level 3,所以几乎所有目前在市面上流通的 Android 版本皆可使用) 是除 Thread 外的另一种选择,Android 团队鼓励主执行绪(UI thread) 专注于操作 & 画面的流畅呈现, 其余工作 (如网络资料传输.档案/磁碟/资料存取) 最好都在背景执行: Thread 通常要搭配 Handler 使用,而 AsyncTask 用意在简化背景执行 thread 程序码的撰写. 如果您预期要执行的工作能在几秒内完成,就可以选择使用 AsyncTas

AsyncTask陷阱之:Handler,Looper与MessageQueue的详解_Android

AsyncTask的隐蔽陷阱先来看一个实例这个例子很简单,展示了AsyncTask的一种极端用法,挺怪的. 复制代码 代码如下: public class AsyncTaskTrapActivity extends Activity {    private SimpleAsyncTask asynctask;    private Looper myLooper;    private TextView status;     @Override    public void onCreate