`
yunshangbuhe
  • 浏览: 226846 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AsyncTask activity异步线程 转

阅读更多
AsyncTask activity异步线程 解释:
最近使用AsyncTask很是郁闷,(其实郁闷的原因是个人原因,太疏忽了)不过,如果你不知道这个类那就更是郁闷了
应用场景:我最近从网上看到好多人求异步加载图片的方法,yes,它可以实现,的用男他,哈哈,很爷们的类,我主要是开发短信模块的时候,需要头部先加载,列表短信后加载,放置开启软件会出现黑屏等待,不都为了用户么,哈哈
当然你会说,扯蛋吧,开个Thread不就行了,那你就从activity里面开发线程管理一下它的显示我看看
废话不说了,讲解一下AsyncTask,当然我的理解肯定会有错误的地方
AsyncTask<Params, Progress, Result>:
一:三个参数是做什么的?
params:Params, the type of the parameters sent to the task upon execution. 
简单的说就是你传进去的参数,是,在你调用AsyncTask的execute时传
Progress:Progress, the type of the progress units published during the background computation. 
过程参数
Result, the type of the result of the background computation. 
返回参数,就是你开启一个后台线程想处理得到的返回值

二:
例子
api本身的例子
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
  protected Long doInBackground(URL... urls) {
  int count = urls.length;
  long totalSize = 0;
  for (int i = 0; i < count; i++) {
  totalSize += Downloader.downloadFile(urls[i]);
  publishProgress((int) ((i / (float) count) * 100));
  }
  return totalSize;
  }

  protected void onProgressUpdate(Integer... progress) {
  setProgressPercent(progress[0]);
  }

  protected void onPostExecute(Long result) {
  showDialog("Downloaded " + result + " bytes");
  }
}
new DownloadFilesTask().execute(url1, url2, url3);
URL就为传进去的参数,Integer过程处理参数,后台线程Long返回参数
三:说说他几个方法的含义
1。onPreExecute(), invoked on the UI thread immediately after the task is executed. This step is normally used to setup the task, for instance by showing a progress bar in the user interface. 
大体就是你可以拿它来做初始化,最开始执行的参数
2.doInBackground(Params...), invoked on the background thread immediately after onPreExecute() finishes executing. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use publishProgress(Progress...) to publish one or more units of progress. These values are published on the UI thread, in the onProgressUpdate(Progress...) step. 
当然这个是最重要的参数。
注意:你想开启线程就是要异步处理,这里面放你最浪费时间的事物,当然记住,这是后台线程,不属于UI,所以不能对你的界面进行操作,比如更改显示,切忌只能用来处理麻烦的不控制前台东西
我的应用,在这里获取的数据库数据,因为一般也就数据查询匹配耗时,我测试一般访问一次数据库耗时50到150毫秒

3.onProgressUpdate(Progress...), invoked on the UI thread after a call to publishProgress(Progress...). The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field. 
就不解释了,这个可以进行做一些触发的提示
4.onPostExecute(Result), invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter. 
这个也很重要,我一般的用法是:得到doInBackground处理后的数据,当然就是Result,然后这里进行页面更改
5.execute
只能调用一次

四:误区
如果你把你非常耗时的操作放进onPostExecute,在模拟器上跑也会感觉实现了异步效果,但是我要告诉你你这样做是错误的。
我的理解:(下面存属个人理解,80%可能是错的,哈哈)
模拟器:迷你器会在UI线程同一资源管理器中开启一个并发线程,所以,这里的所有方法都是并发于UI的线程,也就doInBackground无足轻重
真机:但是你要放在真机上,前5次也会得到你想要的和模拟器上一样的效果,但是第六次乃至以后就没有异步效果了,估计它就只能开五个,以后的和UI属于同一线程了,所以你就只能靠doInBackground了
当然这个理解,我也感觉比较扯蛋,哈哈,有时间研究一下源码




本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/partner4java/archive/2010/05/06/5565152.aspx
分享到:
评论

相关推荐

    AsyncTask 异步多线程加载Demo

    在Android开发中,AsyncTask是一种轻量级的异步任务处理机制,主要用于UI线程与后台线程之间的通信,以实现耗时操作的异步执行,避免阻塞主线程,提高用户体验。`AsyncTask`类提供了简单易用的接口,使得开发者能够...

    AsyncTask异步线程下载图片示例

    `AsyncTask`是Android提供的一种轻量级的异步处理工具,特别适合用来进行短时间的后台操作,如网络请求、图片下载等。本示例将详细介绍如何使用`AsyncTask`来实现图片的异步下载。 首先,`AsyncTask`有三个泛型参数...

    AsyncTask异步线程之基础

    AsyncTask是Android提供的一种轻量级的异步处理机制,适用于执行短时间的后台任务,然后在UI线程更新结果。本文将深入探讨AsyncTask的基本用法、工作原理以及如何使用它来获取网络数据和展示网络图片。 首先,我们...

    Android异步线程使用Demo

    本示例"Android异步线程使用Demo"主要探讨的是Android中的AsyncTask,一个轻量级的异步任务框架,它使得在后台线程执行任务并在UI线程更新结果变得非常便捷。 AsyncTask是一个抽象类,提供了三个泛型参数:Params、...

    Android 使用AsyncTask异步更新UI界面

    `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理类,它简化了在后台线程中执行任务并在UI线程中更新结果的过程。`AsyncTask`包含三个泛型参数:`Params`、`Progress`和`Result`,分别代表输入参数类型、...

    Android中AsyncTask实现多线程计数

    AsyncTask是Android提供的一种轻量级的异步任务处理框架,它允许开发者在后台线程执行计算,并在UI线程更新结果,非常适合进行简单的异步操作,如网络请求、数据计算等。本篇将详细讲解如何在Android中使用AsyncTask...

    使用AsyncTask提高android线程的效率

    `AsyncTask`是Android提供的一种轻量级的异步任务处理机制,它可以帮助开发者在主线程之外执行耗时操作,避免阻塞UI,提高程序响应速度。本篇文章将深入解析如何使用`AsyncTask`来提升Android线程的效率。 ### ...

    Android AsyncTask(异步) 简单样例

    在Android开发中,异步处理是一项关键技能,尤其是在UI线程与后台数据处理之间需要进行交互时。Android AsyncTask就是一种轻量级的机制,用于在后台执行耗时操作,同时保持用户界面的响应性。本篇文章将深入探讨...

    AsyncTask异步加载(中级)

    AsyncTask是Android开发中用于实现轻量级异步任务处理的一种机制,主要应用于UI线程与后台线程之间的数据交互,以避免阻塞主线程,提高应用的响应速度和用户体验。中级水平的AsyncTask通常涉及更复杂的数据处理和...

    Android AsyncTask异步处理下载网页

    注意,Android 3.0(API级别11)以上版本,由于内存管理的变化,`AsyncTask`可能会在Activity被销毁时被回收,从而导致内存泄漏。为避免这个问题,可以使用弱引用或者在`onPause()`中取消正在执行的任务。 此外,...

    android:AsyncTask实现异步处理任务.pdf

    AsyncTask是一个轻量级的异步任务框架,适用于执行与UI交互的短时间后台任务。它简化了线程管理和UI更新的过程,不需要直接处理线程和Handler。AsyncTask包含三个泛型类型: 1. `Params`:代表任务执行所需的输入...

    AsyncTask异步下载图片

    需要注意的是,AsyncTask的实例必须在UI线程中创建,并且同一个Activity中不应重复使用同一个AsyncTask实例。如果需要重新执行任务,推荐创建新的实例。此外,由于Android系统对AsyncTask的内存管理,当Activity被...

    AsyncTask异步任务三.rar

    在Android应用开发中,异步任务(AsyncTask)是一个非常重要的组件,主要用于处理那些需要在后台线程执行但又需要与UI交互的操作。AsyncTask使开发者能够轻松地在后台线程执行耗时操作,然后在主线程更新UI,避免了...

    Asynctask异步加载的使用

    "Asynctask异步加载的使用"这一主题涵盖了如何利用Android SDK中的AsyncTask类来实现后台任务的执行,并在UI线程更新结果。以下是对这个知识点的详细讲解: AsyncTask是Android提供的一种轻量级的异步处理机制,...

    android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

    需要注意的是,每个Activity只能同时运行有限数量的AsyncTask,且它们都在同一个工作线程中执行。 至于修改Button样式,Android提供了丰富的自定义选项。可以在XML布局文件中使用style属性引用预定义的样式,或者在...

    AsyncTask下载网络图片 进度条提示

    `AsyncTask`是Android提供的一种轻量级的异步处理机制,它可以帮助我们在主线程中轻松地执行后台任务,同时更新UI。本篇文章将详细探讨如何使用`AsyncTask`来实现网络图片的下载,并且展示进度条提示。 `AsyncTask`...

    Android开发AsyncTask异步处理任务

    在Android应用开发中,AsyncTask是一个非常重要的工具类,它为开发者提供了在UI线程之外执行耗时操作的能力,从而避免了主线程被阻塞导致的ANR(Application Not Responding)错误。这个博文主要围绕Android开发中的...

    一个AsyncTask异步任务的操作实例

    - AsyncTask不是线程安全的,不建议在多个Activity之间共享同一个AsyncTask实例。 - Android 3.0及以上版本,当Activity被销毁时,系统会自动取消关联的AsyncTask,但在更低版本中需要手动管理。 - 使用时注意...

    Android的AsyncTask异步任务

    本篇文章将深入探讨Android的AsyncTask异步任务,以及如何在实践中应用。 首先,Android是一个基于事件驱动的系统,主线程(UI线程)负责处理用户交互,而复杂的计算或网络请求等耗时操作应在后台线程中执行,以免...

    Android异步请求之AsyncTask

    `AsyncTask`是Android SDK提供的一种轻量级的异步处理机制,它使得开发者能够在后台线程执行任务,并在UI线程更新结果,避免了主线程被阻塞的风险。下面将详细解释`AsyncTask`的原理、使用方法以及注意事项。 ### ...

Global site tag (gtag.js) - Google Analytics