Android的AsyncTask的简单介绍
来源:互联网 发布:mac彻底删除音乐创作 编辑:程序博客网 时间:2024/06/07 20:50
Android中的AsyncTask异步任务
异步任务最主要的操作之一就是在主线程中含有访问网络的耗时操作等,把这些耗时的操作放在异步任务中进行处理。异步任务是线程操作之一,因此掌握异步任务就是掌握用线程处理耗时操作的任务。
首先,AsyncTask的类中有三个很重要的参数
public class MyTask extends AsyncTask<params, progress, result>
三个参数的分别的含义如下:
Params:传入到异步任务中执行的操作,其一般代表的是所链接的网址或服务器的地址。
Progress:发布到UI主线程的进度刻度单位。
Result:后台完成并返回的结果。
在异步类中一般有4种操作:
1. OnPreExeucte:任务执行时显示,构造异步任务,显示进度条。
2. DoInBackground:在OnPreExeucte之后进行处理并返回结果,到OnPostExecute函数中。
3. OnProgressUpdate:更新UI的进度条的操作。
4. OnPostExecute:发布UI的操作。
利用AsyncTask任务来实现从网上下载图片并显示到ImageView中的简单操作。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
那么整个操作的第一步是在AndroidManifest中对访问网络的限制,
<uses-permissionandroid:name="android.permission.INTERNET"/>
只有注册了这个权限的操作才能访问网络。
接下来就是就是布局的操作了,在界面中选用相对布局方式,添加一个Button按钮,一个ImageView的控件,用于显示下载的图片。
那么整个过程的整体思路就是:
1. 操作者点击Button按钮。
2. Button按钮触发事件,链接网络,下载图片。
3. 图片显示到ImageView上。
整个代码如下:(在代码中解释各个步骤的操作)
packagecom.example.android_asynctask_download2; importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStream; importorg.apache.http.HttpResponse;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.DefaultHttpClient; importandroid.app.ProgressDialog;importandroid.graphics.Bitmap;import android.graphics.BitmapFactory;importandroid.os.AsyncTask;importandroid.os.Bundle;importandroid.support.v4.app.Fragment;importandroid.support.v7.app.ActionBarActivity;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewGroup;importandroid.widget.Button;importandroid.widget.ImageView; public classMainActivity extends ActionBarActivity {
//声明的Button变量 private Button button;
//声明ImageView变量 private ImageView imageView;
//声明代表网络地址的变量 private String image_path="http://www.photophoto.cn/m5/008/009/0080090038.jpg"; //增加一个进度条的指示变量 private ProgressDialog dialog; @Override protected voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//通过R类的id来控件的操作id button=(Button)this.findViewById(R.id.button1); imageView=(ImageView)this.findViewById(R.id.imageView1); //初始化进度条 dialog=new ProgressDialog(this); dialog.setTitle("提示"); dialog.setMessage("正在下载....."); //进度条的样式 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //是否失去焦点 dialog.setCancelable(false); //为button添加事件监听器,整个程序的入口就在这里 button.setOnClickListener(newOnClickListener() { @Override public voidonClick(View v) { // TODOAuto-generated method stub //在事件监听器中执行异步方法 //实例化异步实现方法 newmytask().execute(image_path); } }); }
//异步任务类,这个类处理访问网络的操作 public class mytask extendsAsyncTask<String, Integer, Bitmap>{ @Override protected void onPreExecute() { // TODOAuto-generated method stub super.onPreExecute(); //处理进度条的操作 dialog.show(); } @Override protected void onProgressUpdate(Integer... values) { // TODOAuto-generated method stub super.onProgressUpdate(values); dialog.setProgress(values[0]); } @Override protected void onPostExecute(Bitmap result) { // TODOAuto-generated method stub super.onPostExecute(result); dialog.dismiss(); imageView.setImageBitmap(result); }; @Override protected Bitmap doInBackground(String...arg0) { HttpClient httpClient=new DefaultHttpClient();<span style="white-space:pre"></span> HttpGet httpGet=new HttpGet(arg0[0]);<span style="white-space:pre"></span> Bitmap bitmap=null;<span style="white-space:pre"></span> try{<span style="white-space:pre"></span> <span style="white-space:pre"></span>HttpResponse httpResponse=httpClient.execute(httpGet);<span style="white-space:pre"></span>if(httpResponse.getStatusLine().getStatusCode()==200){<span style="white-space:pre"></span>HttpEntity httpEntity=httpResponse.getEntity();<span style="white-space:pre"></span>byte[] data=EntityUtils.toByteArray(httpEntity);<span style="white-space:pre"></span>bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}catch(Exception e){<span style="white-space:pre"></span>e.printStackTrace();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>return bitmap;<span style="white-space:pre"></span>} //异步方法执行耗时操作 } }
- Android的AsyncTask的简单介绍
- AsyncTask的简单介绍
- AsyncTask的简单介绍
- Android中的AsyncTask异步任务的简单介绍
- Android AsyncTask介绍和一个简单的小例子
- android AsyncTask的使用介绍
- Android AsyncTask 的简单使用
- Android AsyncTask的使用介绍与示例
- Android中AsyncTask的简单用法
- Android中AsyncTask的简单用法
- Android 异步调用,AsyncTask的简单用法
- Android中AsyncTask的简单用法
- Android中AsyncTask的简单用法
- Android中AsyncTask的简单用法
- Android中AsyncTask的简单用法
- Android中AsyncTask的简单用法
- Android中AsyncTask的简单用法
- Android中AsyncTask的简单用法
- JS关于jsp页面弹出框传值并显示
- Immutable对象
- 算法笔记--基数排序
- android图像绘制(六)——获取本地图片或拍照图片
- 一致性哈希
- Android的AsyncTask的简单介绍
- Android_访问网络一(使用HttpURLConnection访问)
- Hibernate 延迟加载
- CF #263 (Div. 2) A
- Oracle 11g win32位 window7下安装教程
- 查找算法
- 管道的故事(二)提桶者和管道创建者
- WEB项目设置session有效期
- 加州理工学院公开课:机器学习与数据挖掘_训练与测试(第五课)