为了更加方便我们在子线程中对 UI 进行操作, Android 还提供了另外一些好用的工
具,AsyncTask 就是其中之一。借助 AsyncTask,即使你对异步消息处理机制完全不了解,
也可以十分简单地从子线程切换到主线程。当然,AsyncTask 背后的实现原理也是基于异步
消息处理机制的,只是 Android 帮我们做了很好的封装;
AsyncTask 类是一个抽象类,指定三个泛型参数,这三个参数的用途:
1. Params
在执行 AsyncTask 时需要传入的参数,可用于在后台任务中使用。
2. Progress
后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位。
3.Result
当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。
因此,一个最简单的自定义 AsyncTask 就可以写成如下方式:
class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
……
}
学习了HttpURLConnection后,每次发起请求都需要使用异步加载,因为网络请求必须放在子线程中执行,一个应用程序很可能会在许多地方都使用到网络功能,而代码只有网络请求的路径不同,因此;我们可以把异步加载和发起网络请求提取到一个公共的类库中,这个类不处理图片,只是把一个网址最终返回一个json串的处理类;
1;把流转为字符串的工具类
package com.example.asynnet.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ReadStreamUtils {
public static String toJson(InputStream is) {
byte[] b = new byte[1024];
int len = 0;
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
os.flush();
}
return os.toString("utf-8");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (os != null)
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
2; AsynTask工具类提取
package com.example.asynnet.util;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.os.AsyncTask;
public class UrlFileAsynNetUtils extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
if (connection.getResponseCode() == 200) {
return ReadStreamUtils.toJson(connection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
3. Activity中传入url就可获得json串了
private ListView lv;
private List<String> types;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv_booksort);
String url = "http://japi.juhe.cn/comic/category?key=26e141e02d5c802d39ccf3ae918a7146";
UrlFileAsynNetUtils netu = new UrlFileAsynNetUtils() {
@Override
protected void onPostExecute(String result) {
Gson gson = new Gson();
BookSortJson list = gson.fromJson(result, BookSortJson.class);
types = list.result;
//
lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1,types ));
}
};
// 开始调用
netu.execute(url);
//点击进行查询对应类型的图书列表
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent=new Intent(MainActivity.this, BookItemActivity.class);
intent.putExtra("type", types.get(position));
startActivity(intent);
}
});
}
}
分享到:
相关推荐
此外,从Android 3.0(API级别11)开始,`AsyncTask`的执行策略有所改变,多个相同`AsyncTask`实例可能会并发执行,而非按顺序执行,因此在高版本Android中应特别注意这一点。 总的来说,`AsyncTask`是Android...
在Android应用开发中,AsyncTask是一个非常重要的工具类,它为开发者提供了一种方便的机制来执行后台操作,同时能够在线程间进行数据交互,确保UI的流畅性。本篇文章将深入探讨Android的AsyncTask异步任务,以及如何...
8. **线程和异步处理工具类**:可能包含对`AsyncTask`的封装,或者使用`Handler`、`Runnable`、`ThreadPoolExecutor`来实现线程管理和异步任务。 9. **Log工具类**:提供日志打印功能,可以设置不同的日志级别,...
Android中的异步任务设计主要体现在`AsyncTask`类上,它是Android SDK提供的一种方便快捷的多线程解决方案,用于在后台执行耗时操作,并在完成后更新UI。`AsyncTask`的广泛使用是因为它简化了线程与主线程之间的通信...
AsyncTask是Android提供的一个工具类,用于在后台线程执行耗时操作,然后在UI线程更新结果。它包含三个泛型参数:Params表示输入参数,Progress表示后台任务进度,Result表示任务结果。AsyncTask提供了onPreExecute...
在Android中,我们常用HttpURLConnection、Volley、OkHttp等库来处理HTTP请求。这些库都支持异步请求,能有效提高网络访问性能。 对于"ZMHTTP_TOOL"这个文件,它可能是封装好的一个HTTP请求工具类或者库。在实际...
AsyncTask是Android开发中用于在UI线程之外执行耗时操作的一种工具,它允许开发者在后台线程中执行任务,并在完成后更新UI。在Android应用中,由于主线程(UI线程)负责处理用户交互,如果在此线程上执行耗时操作,...
综上所述,AsyncTask是Android中处理短时、轻量级异步任务的工具,它简化了多线程编程,并确保了UI线程的安全性。但是,随着Android版本的更新,开发者应当考虑使用更现代的解决方案来替代AsyncTask。
在Android开发过程中,工具类是不可或缺的一部分,它们可以极大地提高开发效率,简化代码,使得开发者能够更加专注于核心功能的实现。以下是一些Android开发中常用的工具类及其详细知识点: 1. **日志工具类**: -...
这篇名为“ImageLoader”的Java文件很可能就是一个实现图片异步加载的工具类。在Android中,我们通常使用AsyncTask、Handler、Thread、Service或者第三方库如Glide、Picasso、Universal Image Loader等来实现这个...
通过封装这些功能,我们可以创建一个可重用的TCP通信组件,方便在多个Android应用中进行服务器通信。文件`TcpSocketCommunication`可能包含了具体的代码实现或示例,用于演示如何使用封装好的TCP Socket客户端。在...
工具类可以封装这些异步处理逻辑,确保UI线程不被阻塞。 8. **其他工具类**: 还有其他常见的工具类,如`StringUtils`(字符串操作)、`BitmapUtils`(图片处理)、`LogUtils`(日志记录)等,它们分别对应特定...
10. **异步任务处理工具类**:如使用AsyncTask、Handler或RxJava进行后台任务处理,工具类可以提供更友好的API来执行异步操作。 这些工具类都是Android开发中的常用模块,直接使用可以避免重复造轮子,提高开发效率...
在Android中,MD5工具类可以帮助我们快速计算字符串或文件的MD5值,确保数据的一致性或安全。 6. **SDCard操作工具类**: SDCard工具类用于在外部存储空间进行文件操作,如读写文件、检查SD卡是否存在、获取SD卡...
本压缩包包含的"Android开发工具类"是一个预封装好的库,可以直接引入到你的Android项目中,为你的应用添加各种实用功能。 1. **开发源码(develop(source).jar)** 这个`.jar`文件包含了工具类的源代码。导入此...
在Android开发过程中,工具类(Utility Classes...以上只是Android开发常用工具类的部分示例,实际开发中可能还会涉及XML解析、JSON序列化、动画控制等多个方面。合理使用工具类可以极大地提高代码质量,降低维护成本。
尽管这里的标题提到的是"直接使用的C++封装库",但通常AsyncTask是Android SDK中的一个Java类,用于解决在Android应用中执行耗时操作而不会阻塞主线程的问题,确保用户界面的流畅性。这里我们将重点讨论Android平台...
在Android开发过程中,工具类(Utils Class)是程序员经常使用的一种设计模式,它封装了一些常见的、重复的操作,以便在项目中各个地方复用,提高代码的可读性和维护性。"Android常用工具类"通常包括各种实用方法,...
10. **线程和异步处理工具类**:如AsyncTask、Handler、Runnable、Thread或使用现代的RxJava、Coroutines等库来实现异步操作。 11. **权限检查与请求工具类**:在Android系统中,针对不同的API级别,工具类可以处理...