个人理解
我们都知道android4.0之后网络不能在主线程中访问,所以访问网络只能在其他线程或者在异步中进行。如果只是单纯的实现一次访问网络功能,例如登录,使用AsyncTask是比较好的。也可以把AsyncTask当成一个小线程
具体应用
①AsyncTask分析
1、AsyncTask参数分析
new AsyncTask<Params, Progress, Result>
第一个参数Params,是给它自己的doInBackground方法传参,返回值类型为第三个Result参数的类型
第二个参数Progress,是给它自己的onProgressUpdate方法传参
2、AsyncTask方法执行过程分析(只说主要的)
doInBackground执行完后,把返回值传参给onPostExecute方法
doInBackground一般执行耗时方法
onPostExecute一般处理doInBackground的结果,例如显示UI
②简单使用
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}.execute();
//execute即为执行AsyncTask
③复杂应用
public class DownImageTask extends AsyncTask<String, Integer, Bitmap> {
Bitmap bitmap;
ImageView imageView;
String url;
public DownImageTask(String url, ImageView imageView) {
// TODO Auto-generated constructor stub
this.imageView = imageView;
this.url = url;
}
// 后台进程的执行
@Override
protected Bitmap doInBackground(String... params) {
try {
URL url = new URL(this.url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inputStream = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
// 运行于UI线程,对后台任务的结果做出处理,doInBackground方法执行的结果作为此方法的参数
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
imageView.setImageBitmap(result);
}
}
上述代码是获取网络图片并显示
参数传递我用的是构造方法