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

AsyncTask类的用法

 
阅读更多

为什么要使用AsyncTask?

在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则: 
1. 不要阻塞UI线程 
2. 确保只在UI线程中访问Android UI工具包 
当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。 
比如说从网上获取一个网页,在一个TextView中将其源代码显示出来,这种涉及到网络操作的程序一般都是需要开一个线程完成网络访问,但是在获得页面源码后,是不能直接在网络操作线程中调用TextView.setText()的.因为其他线程中是不能直接访问主UI线程成员 。

android提供了几种在其他线程中访问UI线程的方法。 
Activity.runOnUiThread( Runnable ) 
View.post( Runnable ) 
View.postDelayed( Runnable, long ) 
Hanlder 
这些类或方法同样会使你的代码很复杂很难理解。然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕。 

为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。相对来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handler即可实现。 
AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。 
  Params 启动任务执行的输入参数,比如HTTP请求的URL。 
  Progress 后台任务执行的百分比。 
  Result 后台执行任务最终返回的结果,比如String。 


AsyncTask的执行分为四个步骤:
每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。 
  1) 子类化AsyncTask 
  2) 实现AsyncTask中定义的下面一个或几个方法 
   onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。 
   doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。 
   onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。 
   onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread. 

为正确的使用AsyncTask类,以下是几条必须遵守的准则: 
  1) Task的实例必须在UI thread中创建 
  2) execute方法必须在UI thread中调用 
  3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法 
  4) 该task只能被执行一次,否则多次调用时将会出现异常 
doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。

转自:http://blog.csdn.net/furongkang/article/details/6998734

分享到:
评论

相关推荐

    AsyncTask类实例详解

    下面我们将深入探讨AsyncTask的使用、原理以及如何更新UI。 首先,AsyncTask有三个泛型参数:`Param`, `Progress`, 和 `Result`。它们分别代表异步任务的输入参数类型、任务执行过程中的进度更新类型以及任务完成后...

    android中AsyncTask的用法

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

    Android中异步类AsyncTask用法总结

    AsyncTask 是 Android 平台上一种轻量级的异步处理机制,主要用于在后台执行耗时操作,同时确保结果能够在主线程中安全地更新 UI。...正确理解和使用 AsyncTask,可以帮助开发者更高效地构建用户界面,提升用户体验。

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

    例如,使用ExecutorService创建一个固定大小的线程池,然后通过submit()方法提交AsyncTask实例,返回的Future对象可以用来检查任务状态或者取消任务。 最后,考虑到Android应用的生命周期,我们需要关注AsyncTask与...

    异步操作类AsyncTask

    这篇博文将深入探讨`AsyncTask`的工作原理和使用方法。 `AsyncTask`主要由四个关键部分组成:`onPreExecute()`、`doInBackground()`、`onProgressUpdate()`和`onPostExecute()`。首先,`onPreExecute()`在UI线程中...

    Android异步操作实例源码----AsyncTask类

    以从网上下载图片为例,讲解Android自带的异步操作类----AsyncTask类的用法 public class DownloadPicture extends AsyncTask, Integer, Bitmap> 其中包含三个异步操作类可供测试

    详解Android中用于线程处理的AsyncTask类的用法及

    AsyncTask 有四个主要的方法,每个方法都在特定的线程中运行: 1. **onPreExecute()**:在 UI 线程中运行,通常用于任务开始前的准备工作,如显示加载对话框。 2. **doInBackground(Params... params)**:在后台...

    Android最全最简单的异步任务AsyncTask使用解析

    AsyncTask是一个抽象类,使用时需要继承这个类,然后调用execute()方法。AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用。 AsyncTask的使用需要设定三个泛型Params、Progress和Result的类型,...

    Android AsyncTask用法和异步加载图片.rar

    `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间运行的任务放到后台线程,而将结果更新到主线程,这样可以避免主线程(UI线程)阻塞,提高应用的响应速度。`...

    AsyncTask的使用及ListView的常见优化

    我们需自定义一个`BitmapLruCache`类,继承`LruCache, Bitmap>`,并重写`sizeOf()`方法以计算每个Bitmap的大小。然后在应用启动时实例化并设置给`ImageLoader`,当缓存满时,会自动移除最近最少使用的图片,为新的...

    AsyncTask异步线程下载图片示例

    在这个类中,我们需要重写`doInBackground`方法,该方法在后台线程中运行,执行实际的下载任务。同时,可以重写`onPostExecute`方法,这个方法会在UI线程中执行,接收`doInBackground`的结果并显示到界面上。 ```...

    AsyncTask用法

    AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。  1) 子类化AsyncTask  2) 实现AsyncTask中定义的下面一个或几个方法  ...

    AsyncTask的cancel的有效用法

    本文将深入探讨`AsyncTask`的`cancel`方法的有效用法以及如何实现强制停止`AsyncTask`异步任务。 ### 1. AsyncTask的基本结构 AsyncTask由三个泛型参数定义:`Params`(输入参数类型)、`Progress`(后台任务进度...

    Android AsyncTask 源码解析

    通过以上对 AsyncTask 的源码解析和使用方法的介绍,你应该对如何在 Android 应用中高效地使用异步任务有了更深入的理解。在实际开发中,正确理解和使用 AsyncTask 可以帮助我们编写出更加流畅、响应快速的应用程序...

    AsyncTask基本使用

    下面我们将深入探讨AsyncTask的结构、使用方法以及注意事项。 1. **AsyncTask结构**: AsyncTask是一个抽象类,包含三个泛型参数:`Params`(输入参数类型),`Progress`(后台执行过程中的进度类型),`Result`...

    AsyncTask使用及源码解析

    AsyncTask是Android开发中用于在后台执行任务并更新UI的工具类,它是Android SDK提供的一种轻量级异步处理机制。在Android应用中,我们经常需要执行一些耗时操作,如网络请求、数据库操作等,但这些操作不能在主线程...

    AsyncTask 的使用

    AsyncTask是Android平台中用于在后台执行耗时操作并更新UI的一种工具类。它通过封装线程和Handler,使得开发者可以方便地在后台线程中执行任务,并在UI线程中进行结果处理,从而避免了直接操作UI导致的主线程阻塞...

    Android中AsyncTask的用法实例[收集].pdf

    AsyncTask的典型用法涉及以下几个步骤: 1. onPreExecute(): 这个方法在doInBackground(Params...)之前在UI线程中被调用。它可以用来设置任务的初始状态,比如加载提示等。 2. doInBackground(Params...): 此方法...

    封装AsyncTask

    在"AsyncTaskDemo"中,我们可以看到具体的实现示例,这可能包括如何创建一个可重用的AsyncTask类,以及如何在实际项目中调用和使用这个类。这个例子可以帮助开发者更好地理解如何在Android应用中有效地利用AsyncTask...

Global site tag (gtag.js) - Google Analytics