`

关于AsyncTask的那些事

 
阅读更多

  一直以来就简单的认为有多少个网络请求直接new多少个AsyncTask,但是这显然不行的

 

a、线程的生命周期的开销还是相当高的,大量的线程的创建将消耗大量的计算机资源

b、可创建线程的数量存在一个限制值(这个值由平台觉得,且受很多因素的制约),如果超过这个限制,可能会报OOM错误

c、在一定范围内,增加线程可以提高系统吞吐量,但是超过了这个范围,就物极必反了,只会降低程序的执行速度。

 

如果Gridview或者ListView这类控件加载的数量非常大的,会消耗大量的内存和资源

推荐使用一般是1-2个网络线程+阻塞队列 所有任务在队列中,那1-2个线程,不断从队列中获取数据

 

(关于阻塞队列 可以看看

http://endual.iteye.com/blog/1412212

www.cnblogs.com/linjiqin/archive/2013/05/30/3108188.html

 

android1.5,1.6-2.3以及3.0这几个阶段AsyncTask的改动参看地址:

http://blog.csdn.net/pipisky2006/article/details/8535454

 

AsyncTask的源码分析 参看郭神博客: http://blog.csdn.net/guolin_blog/article/details/11711405

 

接着是关于线程池以及阻塞队列的问题

这个是1.6-2.3的AsynTask部分源码

private static final int CORE_POOL_SIZE =5;//5个核心工作线程 
private static final int MAXIMUM_POOL_SIZE = 128;//最多128个工作线程 
private static final int KEEP_ALIVE = 1;//空闲线程的超时时间为1秒 
private static final BlockingQueue<Runnable> sWorkQueue = 
new LinkedBlockingQueue<Runnable>(10);//等待队列 
//线程池是静态变量,所有的异步任务都会放到这个线程池的工作线程内执行。
private static final ThreadPoolExecutorsExecutor =
new ThreadPoolExecutor(CORE_POOL_SIZE, 
MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS,
sWorkQueue,sThreadFactory);

 

 

  此处代码可理解为: 当前线程池每次并行5个线程,最大可扩展为128个线程(动态算法扩展),阻塞队列阻塞10个线程

  (动态算法扩展:如果长期阻塞队列阻塞,会动态改变线程池大小,如果运行过快会减小大小,

     所以线程池会有上限和下限

     阻塞队列:当队列满的时候,会阻塞你的入队操作,当队列有空闲,阻塞状态取消,入队)

 

   如果线程池中已5个运行线程,阻塞队列里已经存放10个线程,新添加的线程处于阻塞状态,不入阻塞队列,不放入线程池(放入线程池,说明该线程正在运行)

 

 

 

 

分享到:
评论

相关推荐

    AsyncTask类实例详解

    因此,在实际开发中,通常建议使用更高级的异步处理机制,如`IntentService`或`JobScheduler`,尤其是对于那些需要长时间运行或者对系统资源消耗较大的任务。 最后,从Android 3.0(API Level 11)开始,AsyncTask...

    关于AsyncTask的使用1

    AsyncTask是Android开发中一个重要的多线程组件,它主要用于执行后台异步任务,避免阻塞主线程,确保用户界面的流畅性。由于Android的主线程(UI线程)不能进行耗时操作,如大图加载或网络请求,否则会导致...

    Android AsyncTask 源码解析

    **Android AsyncTask 源码解析** AsyncTask 是 Android 平台上一个非常重要的工具类,用于在后台线程执行耗时操作,然后在 UI 线程更新结果,从而避免了因长时间运行任务而导致的 ANR(Application Not Responding...

    02_AsyncTask_简单演示AsyncTask异步操作

    AsyncTask_简单演示AsyncTask异步操作,写一个简单的AsyncTask异步操作解决上一篇文章提到的线程阻塞问题,对应我的博客《网易博客迁移:Android专题之AsyncTask(二)简单演示AsyncTask异步操作》,有问题欢迎留言...

    AsyncTask结合HttpUrlConnection的例子

    本例子是关于如何将`AsyncTask`与`HttpURLConnection`结合,实现一个简单的网络请求。 `AsyncTask`是Android提供的轻量级异步任务框架,它允许开发者在后台线程执行耗时操作,并在主线程更新UI。`AsyncTask`包含三...

    android任务后台处理 asyncTask封装

    `AsyncTask`是Android提供的一种轻量级的异步处理机制,它能让我们在后台线程执行耗时操作,并在完成后更新主线程中的UI。下面我们将深入探讨`AsyncTask`的工作原理及其封装方法。 `AsyncTask`的核心在于三个泛型...

    android中AsyncTask的用法

    在Android应用开发中,AsyncTask是一个用于在后台线程执行耗时操作并更新UI的工具类,它是Android 1.5版本引入的。AsyncTask的设计初衷是为了简化异步编程,避免直接操作线程和Handler带来的复杂性。下面我们将详细...

    Android AsyncTask异步处理下载网页

    Android提供了一种便捷的机制,名为`AsyncTask`,用于在后台线程执行这些任务,同时允许在主线程更新UI。`AsyncTask`是一个轻量级的框架,设计用来简化在Android应用程序中进行后台操作的过程。 `AsyncTask`包含三...

    AsyncTask的示例代码

    以上就是关于AsyncTask的基本介绍和使用方法,开发者可以根据实际需求灵活运用,以提升Android应用的用户体验。在实际开发中,理解并掌握AsyncTask的工作原理和最佳实践,对于编写高效、流畅的Android应用至关重要。

    一个AsyncTask的Demo

    它主要设计用来简化异步处理,特别是那些需要与用户界面交互的任务。在这个"AsyncTask的Demo"中,我们将深入探讨AsyncTask的工作原理及其核心组件。 AsyncTask包含三个泛型参数:Params、Progress和Result。Params...

    01_AsyncTask_演示线程阻塞

    `AsyncTask`是Android提供的一种轻量级的异步任务处理框架,它允许开发者在后台线程执行耗时操作,然后在UI线程更新结果,避免了阻塞主线程导致的ANR(Application Not Responding)问题。这篇我们将深入探讨`...

    AsyncTask源码

    最新AsyncTask源码

    AsyncTask的简单应用

    关于AsyncTask的简单运用,其中有关于界面响应阻塞错误的简单示例和Thread+Handler的简单使用 本工程作为个人博文的示例代码。 博文详情见:http://blog.csdn.net/ft2028739/article/details/8085329

    AsyncTask练习demo

    AsyncTask是Android中一个用于在后台线程执行耗时操作并更新UI的工具类,它非常适合处理轻量级的异步任务。在这个"AsyncTask练习demo"中,我们可以深入理解和学习如何有效地使用AsyncTask。 首先,AsyncTask有三个...

    异步任务AsyncTask

    在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在主线程中需要执行网络请求、数据库操作或大型数据处理时。它能够避免UI线程被阻塞,提供更好的用户体验。让我们深入了解一下`...

    Android 线程AsyncTask逐步在list中加入条目

    在这个"Android 线程AsyncTask逐步在list中加入条目"的例子中,我们首先会创建一个`AsyncTask`子类,如`LoadDataTask`,继承自`AsyncTask`。`doInBackground()`方法将用于生成数据(可能是从网络请求或本地数据库...

    AsyncTask小练习

    AsyncTask是Android开发中用于在后台执行任务并更新UI的工具类,尤其适用于处理轻量级的异步操作。在Android应用中,由于主线程(UI线程)不能执行耗时操作,否则会导致应用程序无响应(ANR)。为了解决这个问题,...

    AsyncTask之cancel操作

    在Android开发中,AsyncTask是一个常用的工具类,用于在后台线程执行耗时操作,并在UI线程更新结果。本文将深入探讨`AsyncTask`的`cancel`操作,结合提供的链接文章《AsyncTask中cancel方法的误读》进行详细解析。 ...

    AsyncTask异步下载图片

    它适用于那些不需要长时间运行的任务,如网络请求、图片下载等,避免阻塞主线程,提升用户体验。下面将详细解释AsyncTask的工作原理和如何使用它来实现异步下载图片。 首先,AsyncTask有三个泛型参数:Params, ...

    面向对象思想实现AsyncTask类的复用

    在Android开发中,AsyncTask是一种轻量级的异步处理工具,用于在后台线程执行耗时操作,然后在UI线程更新结果。本篇文章将深入探讨如何利用面向对象的思想来实现AsyncTask类的复用,提高代码的可维护性和灵活性。 ...

Global site tag (gtag.js) - Google Analytics