`

AsyncTask 学习翻译并总结

阅读更多

最近闲来无事,遂看了一下android文档

其中AsyncTask类以前未用过,这里学习并记录一下:

AsyncTask ,见名知意,就是异步任务的意思。android为什么要提供这个类呢?自然有他的妙处和巧处。

我们知道,在android中非UI线程是无法对UI进行操作的,而比较耗时的任务,我们一般考虑到UI卡死,不会直接放在UI线程中来完成,而是

另开辟一个线程来完成这个耗时的任务。这样,在另一个线程中当任务完成时,需要将任务的执行结果。反馈到UI怎么办呢?

对,除了可以使用Activity的runOnUiTread(Runnable)方法,还有一个同样方便的类,就是AsyncTask。下面是我对SDK文档的翻译了,自己的话。总感觉别扭。呵呵。

一、简介:

AsyncTask 类允许你方便正确地使用UI线程。该类可以将耗时的操作放在后台来处理,而不需要人为地另开线程或者使用handlers来完成。

当需要开辟一个后台线程并且其运行结果需要反映到UI线程的时候,AsyncTask就派上用场了。定义一个AsyncTack时,需要指定3种类型(Params,Progress,Result),完成4个步骤(begin,doInBackground,processProgress,end)。

二、使用方法:

由于AsyncTask是个抽象类,所以,你需要定义一个类来继承它。同时,这个子类至少需要实现doInBackground(Params...)这个方法。

同时,在多数情况下,您可能还需重写另一个方法:onPostExecute(Result)。

下面是文档中的实例:

一旦定义类AsyncTask的子类,您就可以直接使用 new DownloadFilesTask().execute(url1,url2,url3)来执行一个任务;

三、AsyncTask的三种范型:

1、Params:任务执行时需要的参数类型,(就是execute方法传入的类型)。

2、Progress:后台计算中使用的进度单位数据类型

3、Result:任务执行结果的类型

注意:并不是所有的类型都需要,如果某个类型不需要,用Void,如:

private class MyTask extends AsyncTask<Void, Void, Void>{...}

四、AsyncTask的四个阶段(步骤)

当一个任务被执行的时候,他就需要经过下面四个阶段。

1、onPreExecute();这个方法,在调用execute()后,立即在UI线程中被执行,该方法通常用于对任务做一些基本的设置,比如在用户界面上显示一个进度条。

2、doInBackground(Params...);这个方法,在onPreExecute()执行完成后,在后台运行。这个方法中就是完成耗时操作。异步任务的Params参数传入该方法,同时,方法的执行结果需要返回,同时需要传入下一个阶段的方法。在这个方法中还可以使用publishProgress(Progress...)改变当前的进度值。这些值将会在onProgressUpdate(Progress...)方法中同步显示在UI线程。

3、onProgressUpdate(Progress...);这个方法是在publishProgress(Progress...)方法被调用之后,在UI线程中执行的。以便后台任务在执行的时候,在用户界面可以显示各种进度信息。例如:可以用进度条模拟进度或者在文本域中显示进度日志。

4、onPostExecute(Result); 该方法在后台任务完成后由UI线程调用,后台任务的执行结果作为参数传入该方法。

五、正确使用该类需要注意的几点:

1、这个类的实例需要在UI线程中创建

2、execute(Params...)方法必须在UI线程中调用

3、不要人为地调用上面四个步骤对应的方法。

4、一个任务只能执行一次。如果再次请求一个执行,将会报异常。

分享到:
评论

相关推荐

    Android中异步类AsyncTask用法总结

    4. **onPostExecute(Result)**:在主线程中调用,后台任务完成后的回调,用于将结果传递到主线程并更新 UI。 5. **onCancelled()**:如果任务被取消,这个方法会在适当的时候被调用。 使用 AsyncTask 时需要注意...

    AsyncTask类实例详解

    AsyncTask是Android中用于在后台线程执行耗时操作并更新UI的一种机制。它通过封装了线程管理和与主线程的交互,简化了在UI线程中处理异步任务的流程。下面我们将深入探讨AsyncTask的使用、原理以及如何更新UI。 ...

    Android AsyncTask Demo 自己参考网络写的学习 demo

    这个“Android AsyncTask Demo”是开发者为了学习和理解AsyncTask工作原理而编写的示例代码。下面我们将深入探讨AsyncTask的相关知识点。 1. **AsyncTask简介** AsyncTask是Android提供的一个轻量级组件,它允许...

    Pro Android学习:AsyncTask小例子

    这是Pro Android学习系列中AsyncTask部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

    Android AsyncTask 源码解析

    这个例子涵盖了从初始化任务、执行任务到处理结果的完整流程,是理解和学习 AsyncTask 的一个好起点。 通过以上对 AsyncTask 的源码解析和使用方法的介绍,你应该对如何在 Android 应用中高效地使用异步任务有了更...

    01_AsyncTask_演示线程阻塞

    在Android应用开发中,线程管理是至关重要的,因为它直接影响到应用的性能和用户体验。...通过学习这些内容,开发者可以更好地理解和运用`AsyncTask`,提高应用的响应速度和用户体验。如有任何疑问,欢迎留言讨论。

    android任务后台处理 asyncTask封装

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

    AsyncTask结合HttpUrlConnection的例子

    总结来说,`AsyncTask`结合`HttpURLConnection`能有效处理网络请求,避免阻塞主线程,同时保持用户界面的交互性。这个例子为开发者提供了一个基础的网络请求模板,可以根据实际需求进行扩展和定制。在实际开发中,你...

    AsyncTask练习demo

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

    02_AsyncTask_简单演示AsyncTask异步操作

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

    AsyncTask源码

    最新AsyncTask源码

    一个AsyncTask的Demo

    AsyncTask是Android平台中用于在后台执行耗时操作并更新UI的一种工具类。它主要设计用来简化异步...通过查看AsynctaskDemo的源代码,我们可以学习到如何正确地使用AsyncTask来避免阻塞UI线程,同时保持与用户的交互。

    异步任务AsyncTask

    总结,`AsyncTask`是Android中实现简单异步操作的有效工具,特别适用于短时、频繁的任务。不过,对于复杂的后台任务,建议使用其他更强大的解决方案,如`IntentService`、`JobScheduler`或现代的`LiveData`和`...

    android中AsyncTask的用法

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

    Android AsyncTask异步处理下载网页

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

    AsyncTask之cancel操作

    总结来说,正确理解和使用`AsyncTask`的`cancel()`方法对于优化Android应用的性能和用户体验至关重要。开发者需要确保在`doInBackground()`中正确处理`InterruptedException`,并在`onCancelled()`和`onPostExecute...

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

    1. 创建一个继承自`AsyncTask`的类,例如`LoadDataTask`,并定义所需的泛型参数。 2. 在`onPreExecute()`中,可能需要初始化ListView和Adapter,并显示一个加载提示。 3. `doInBackground()`中,模拟数据生成过程,...

    xamarin学习笔记A14(安卓AsyncTask和RunOnUiThread)

    在Android开发中,异步操作是必不可少的一部分,用于在后台执行耗时任务,避免阻塞主线程并提高用户体验。在Xamarin.Android环境下,开发者可以利用Java原生的AsyncTask类和Activity的RunOnUiThread()方法来实现这样...

    AsyncTask加载网络图片

    在Android开发中,异步任务(AsyncTask)是一种常见的用于执行后台操作并更新UI线程的工具,尤其在处理耗时任务,如加载网络图片时非常有用。AsyncTask提供了简单的接口,使得开发者可以在后台线程中执行计算,然后...

    AsyncTask小练习

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

Global site tag (gtag.js) - Google Analytics