android Asynctask的优缺点?能否同时并发100+asynctask呢?

一  Asynctask的优缺点?

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

优点:

1.简单,快捷

2.过程可控

3.使用的缺点:

缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.

Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理。

首先明确Android之所以有Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的

Android为了降低这个开发难度,提供了AsyncTask。AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。

AsyncTask直接继承于Object类,位置为android.os.AsyncTask。要使用AsyncTask工作我们要提供三个泛型参数,并重载几个方法(至少重载一个)

AsyncTask定义了三种泛型类型 Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。

Progress 后台任务执行的百分比。

Result 后台执行任务最终返回的结果,比如String。

使用过AsyncTask 的同学都知道一个异步加载数据最少要重写以下这两个方法:

doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。

onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回

有必要的话你还得重写以下这三个方法,但不是必须的:

onProgressUpdate(Progress…) 可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。

onPreExecute() 这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。

onCancelled() 用户调用取消时,要做的操作

使用AsyncTask类,以下是几条必须遵守的准则:

Task的实例必须在UI thread中创建;

execute方法必须在UI thread中调用;

不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;

该task只能被执行一次,否则多次调用时将会出现异常;

二Handler异步实现的原理和适用的优缺点

在Handler 异步实现时,涉及到Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成Message-àLooper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变更。

使用的优点:

1.结构清晰,功能定义明确

2. 对于多个后台任务时,简单,清晰

使用的缺点:1.在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

AsyncTask 与 thread 执行异步任务的优缺点在哪里?
参考案例  下面有总结

    public
class
TestActivity extends Activity{

@Override

protected
void
onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

(newLoadAsyncTask()).execute(1000);

}

/**

* 生成该类的对象,并调用execute方法之后

* 首先执行的是onProExecute方法

* 其次执行doInBackgroup方法

*/

private
class 
LoadAsyncTask extends
AsyncTask<Integer,Integer,String>{

@Override

protected
void
onPreExecute(){

Log.v("TestActivity","开始执行异步线程");

}

/**

* 这里的Integer参数对应AsyncTask中的第一个参数

* 这里的String返回值对应AsyncTask的第三个参数

* 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改

*/

@Override

protected String
doInBackground(Integer...params){

// 加载网络数据

}

@Override

protected
void
onPostExecute(Stringresult){

Log.v("TestActivity","结束执行异步线程");

// 更新UI

}

}

}

通过thread+Runnable+handler

public
class
TestActivityextends Activity{

private threadHandler handler;

@Override

public
void
onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 初始化句柄

handler=new threadHandler(this);

// 开启新线程

newThread(newRunnable(){

@Override

public void run(){

// 加载网络数据

updateUI();

}

}).start();

}

static
class
threadHandler extends
Handler{

private
WeakReference<TestActivity>testReference;

public threadHandler(TestActivity activity){

testReference=new WeakReference<TestActivity>(activity);

}

@Override

public void handleMessage(Message msg){

super.handleMessage(msg);

TestActivity test= testReference.get();

// 更新UI

}

}

public
void
updateUI(){

// 其他处理

handler.sendEmptyMessage(0);

}

}

这2种方式都可以实现,但是他们的区别在哪里?优缺点各是什么?

(1)、AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute()、onPostExecute()及更新UI方法onProgressUpdate()均运行在主线程中,这样就不用Handler发消息处理了;

(2)、我不太同意封装好就会影响性能的说法,在我实际的运用中,真正的缺点来自于AsyncTask的全局线程池只有5个工作线程,也就是说,一个APP如果运用AsyncTask技术来执行线程,那么同一时间最多只能有5个线程同时运行,其他线程将被阻塞(注:不运用AsyncTask执行的线程,也就是自己new出来的线程不受此限制),所以AsyncTask不要用于多线程取网络数据,因为很可能这样会产生阻塞,从而降低效率。

三.
    能否同时并发100+asynctask呢?

AsyncTask用的是线程池机制,容量是128,最多同时运行5个core线程,剩下的排队。

android Asynctask的优缺点?能否同时并发100+asynctask呢?,布布扣,bubuko.com

时间: 2025-01-07 10:15:44

android Asynctask的优缺点?能否同时并发100+asynctask呢?的相关文章

android Asynctask的优缺点?是否能同一时候并发100+asynctask呢?

一  Asynctask的优缺点? AsyncTask,是android提供的轻量级的异步类,能够直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步运行的程度(能够通过接口实现UI进度更新),最后反馈运行的结果给UI主线程. 长处: 1.简单,快捷 2.过程可控 3.使用的缺点: 缺点: 在使用多个异步操作和并须要进行Ui变更时,就变得复杂起来. Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理. 首先明白Android之所以有Handle

Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一.AsyncTask的使用 AsyncTask是一种轻量级的异步任务类,可以很方便的在线程池中执行异步任务,并且将进度和结果传递给主线程.其底层由Thread+handler实现. AsyncTask是一个抽象的泛型类,其类的声明如下: public abstract class AsyncTask<Params, Progress, Result>

Android异步加载全解析之使用AsyncTask

Android异步加载全解析之使用AsyncTask 概述 既然前面提到了多线程,就不得不提到线程池,通过线程池,不仅可以对并发线程进行管理,更可以提高他们执行的效率,优化整个App.当然我们可以自己创建一个线程池,不过这样是很烦的,要创建一个高效的线程池还是挺费事的,不过,Android系统给我吗提供了AsyncTask这样一个类,来帮助我们快速实现多线程开发,它的底层实现,其实就是一个线程池. AsyncTask初探 AsyncTask,顾名思义就是用来做异步处理的.通过AsyncTask,

使用ab.exe监测100个并发/100次请求情况下同步/异步访问数据库的性能差异

ab.exe介绍 ab.exe是apache server的一个组件,用于监测并发请求,并显示监测数据 具体使用及下载地址请参考:http://www.cnblogs.com/gossip/p/4398784.html 本文的目的 通过webapi接口模拟100个并发请求下,同步和异步访问数据库的性能差异 创建数据库及数据 --创建表结构 CREATE TABLE dbo.[Cars] ( Id INT IDENTITY(1000,1) NOT NULL, Model NVARCHAR(50) 

Android异步消息处理机制——handle与Looper,AsyncTask

Android线程间的通讯采用异步消息处理机制,主要由四部分组成,包括Message,Handler,MessageQueue和Looper. 一个线程只有一个Looper与Messagequeue,但可以有多个handler实例. 例:线程A发消息Message,线程B处理消息Message. 需要在线程B中新建一个Handler实例handler,在A线程中通过该handler发送消息到线程B中的Messagequeue中, 通过B中的Looper以及先进先出的原则取出该消息并处理消息,所以

Android异步更新UI的方式之使用AsyncTask异步任务

由于性能要求,android要求只能在UI线程中更新UI,要想在其他线程中更新UI,给大家介绍一种方式:使用AsyncTask异步任务. 下面用这种方式更新一个TextView: 注:更新UI的操作只能在onPostExecute(String result)方法中. package com.example.runonuithreadtest;  import android.app.Activity;  import android.os.AsyncTask;  import android.

nginx php-fpm unixsocket并发100以上报502解决方法

nginx php-fpm用unix socket方式,当并发达到100以上是,会报502错,改成tcp方式就无此问题 本来用unix socket是为了提高性能,却不支持大并发,经查发现是系统内核限制导致不稳定,修改下列内核参数解决 调整以下参数 sysctl.conf net.unix.max_dgram_qlen = 4096 net.core.netdev_max_backlog = 4096 net.core.somaxconn = 4096 php-fpm.conf listen.b

Android handler详解(面试百分之100问到)

handler在Android中被称为“消息处理者”,在多线程中比较常用. handler内部实现原理 handler实现机制:1,Message对象,表示要传递的一个消息,内部使用链表数据结构实现一个消息池,用于重复利用,避免大量创建消息对象,造成内存浪费2,MessageQueue对象,存放消息对象的消息队列,先进先出原则3,Looper对象负责管理当前线程的消息队列4,handler对象负责把消息push到消息队列中,以及接收Looper从消息队列中取出的消息 handler的内存泄露问题

Android Asynctask与Handler的比较,优缺点区别,Asynctask源码

1  AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控 使用的缺点: l  在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. 2 Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Loo