虽然使用线程能适用大部分异步的场景,但是代码看起来还是不够简练,在android平台,还有另外一种解决方案----AsyncTask。
首先直接上代码:
private class getRemoteDataTask extends AsyncTask<String, Integer, ArrayList<Hashtable<String, String>>> {
protected void onPostExecute(ArrayList<Hashtable<String, String>> dataList) {
this.cancel(false);
}
@Override
protected ArrayList<Hashtable<String, String>> doInBackground(String... params) {
ArrayList<Hashtable<String, String>> dataList = new ArrayList<Hashtable<String, String>>();
return dataList;
}
}
下面来解释一下,doInBackground方法类似于在线程中的run方法,这个方法是另一个后台线程中执行,然后执行完会通过回调机制执行onPostExecute,神奇之处就在于,onPostExecute这个方法的执行权限又交回给activity的主进程中执行,也就是说onPostExecute这个方法里面可以操作UI。于是就能实现异步读取数据,并且操作UI,是不是比起自己写线程方便很多?
然后我们来剖析一下,这种方案的几个不太容易理解的地方。
一、AsyncTask<String, Integer, ArrayList<Hashtable<String, String>>> 注意这里几个泛型的定义和意义,第一个代表该方法被调用时传递的参数类型,注意是参数的类型,而不是参数的个数,也就是说如果定义为String,那么,该方法被调用时所传递的参数只能是String类型;然后第二个Integer,资料上说是线程后台执行的百分比,不过我没彻底弄清楚这个的含义,欢迎大家指教,然后泛型里的第三个ArrayList<Hashtable<String, String>,这个和该类的两个方法都有密切联系,该泛型是指后台执行返回的结果的类型。
二、doInBackground这个方法是在后台执行的,然后它的返回结果将提供给onPostExecute,所以,doInBackground的返回值必须和AsyncTask类的第三个泛型定义一致,然后onPostExecute的参数类型必须和doInBackground的返回类型一致。
三、前边我们都一直在解释AsyncTask这个类,但是怎么调用呢?其实很简单
new getRemoteDataTask().execute(String... params);
注意,execute方法里传递的参数的类型必须和AsyncTask第一个泛型的类型一致,然后这个方法传递的参数将在
doInBackground(String... params)
这里面起作用。
第四,AsyncTask还有很多方法,我们仅仅分析了其中两个,它被继承后,必须要重写的一个方法是doInBackground,因为doInBackground的返回值将在onPostExecute中被用来更新UI,所以我们姑且认为这两个方法是最重要。
第五、AsyncTask的实例必须在UI线程中被调用、
execute(String...params)必须在UI线程中调用、
不要手动调用onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)等方法、
AsyncTask只执行一次。
分享到:
相关推荐
本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...
本篇文章将深入探讨如何在Android中使用`AsyncTask`来异步加载网络图片。 首先,我们了解`AsyncTask`的基本结构。`AsyncTask`有三个泛型参数:`Params`, `Progress`, 和 `Result`。在本例中,`Params`通常是网络...
在Android中,AsyncTask是处理后台任务的标准方式之一,特别适用于短时、轻量级的任务,如网络请求或数据库操作。它包含三个泛型参数:Params(输入参数),Progress(后台执行过程中的进度更新参数)和Result(返回...
在这个"Android异步加载图片例子"中,我们将探讨如何在Android应用中实现这一功能。 首先,我们需要理解Android的主线程(UI线程)与工作线程的区别。主线程负责处理用户界面交互,而工作线程则用于执行耗时操作,...
本篇文章将详细介绍如何通过多线程和AsyncTask这两种方式实现ListView中的网络图片异步加载,并结合Json数据解析和缓存机制,提高应用性能。 首先,我们来看多线程的使用。在Android中,主线程负责UI操作,而网络...
本项目“Android异步加载文字”将探讨如何在Android Studio中实现在后台加载文本数据,避免UI卡顿,提高应用响应速度。 首先,我们需要了解Android的多线程模型。Android应用的主要执行线程被称为UI线程,负责处理...
本篇将详细介绍Android中如何利用ListView和AsyncTask实现数据的异步加载。 一、ListView简介 ListView是一种可滚动的视图,可以显示一组项目列表。每个项目都由一个ListView的子视图(通常称为“项布局”)表示。...
Handler和AsyncTask是实现异步加载的两种常见方式,除此之外,还可以使用Loader、IntentService、Retrofit+OkHttp等工具或框架。 **对比与选择:** - Handler适合处理周期性的、连续的任务,如定时刷新UI,或者需要...
AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习...
"Android异步加载图片"是一个常见的需求,它涉及到用户体验优化、内存管理以及线程安全等多个方面。这里我们将深入探讨这个主题,并结合提供的"ImageLoader-develop"可能是一个图片加载库的源码,来讲解相关的知识点...
另一种常见的方式是自定义异步加载,例如使用AsyncTask。AsyncTask允许在后台线程执行计算,并在UI线程更新结果。以下是一个简单的示例: ```java private class LoadImageTask extends AsyncTask, Void, Bitmap> {...
本文将深入探讨Android的异步加载解决方案,尤其是通过`AsyncTask`类实现的方式。 `AsyncTask`是Android SDK提供的一种轻量级的异步处理工具,适用于快速执行少量的后台任务。它具有三个泛型参数:`Params`(输入...
"Asynctask异步加载的使用"这一主题涵盖了如何利用Android SDK中的AsyncTask类来实现后台任务的执行,并在UI线程更新结果。以下是对这个知识点的详细讲解: AsyncTask是Android提供的一种轻量级的异步处理机制,...
综上所述,Android异步加载图片和缓存策略是提升应用性能的关键技术。通过合理使用工作线程和缓存机制,可以显著改善用户体验,降低系统负载。在实际开发中,选择合适的图片加载库,并结合最佳实践,能够帮助我们...
1. Android的异步加载原理,包括`AsyncTask`和`Handler`的使用。 2. 弱引用在防止内存泄漏中的应用。 3. GridView与适配器的结合,自定义Adapter加载网络图片。 4. 图片加载库的使用,如Universal Image Loader、...
而"android ExpandableListView子集异步加载+IphoneTreeView"这个主题主要关注如何在`ExpandableListView`中实现子集的异步加载以及模仿iPhone风格的树形视图(`IphoneTreeView`)。 首先,让我们深入理解`...
在实际的开发中过程,我们可能经常要求应用程序做一些“耗时操作”,例如网络下载,加载大量资源等。这时候我们就不能直接在UI线程中(主线程)中去完成这些“耗时操作”,因为,UI线程主要是用来更新界面UI,如果一次...
在Android应用开发中,图像加载是一个常见的...以上就是关于“Android异步加载图像小结(含线程池,缓存方法)”的主要知识点。在实际应用中,开发者应结合项目需求,合理选择和优化这些技术,以提供流畅的用户体验。
在`AsyncTaskDemo`这个例子中,我们可以看到如何使用`AsyncTask`来异步加载网络图片: 1. 首先创建一个继承自`AsyncTask`的子类,例如`LoadImageTask`,并指定合适的泛型参数,如`LoadImageTask, Void, Bitmap>`。 ...
综上所述,"android Gridview 异步加载网络图片"是一个涉及Android UI设计、多线程编程、图片处理、缓存策略以及第三方库使用的综合主题。通过学习这个示例,开发者可以提升应用性能,提供更优质的用户体验。