AsyncTask 总结
来源:互联网 发布:戴尔外星人灯光软件 编辑:程序博客网 时间:2024/06/11 18:36
AsyncTask 是android 提供给开发者一种简单异步机制。不用去使用Handle 而能简单的实现 异步任务。
相关链接:
官网API
参考博客:
详解Android中AsyncTask的使用
Android AsyncTask完全解析,带你从源码的角度彻底理解
原型:
public abstract class AsyncTask<Params, Progress, Result>
简单使用AsyncTask 下载一张图片
public class MainActivity extends AppCompatActivity { private static final String TAG = "ASYNC_TASK"; ImageView image; ProgressBar mProgress; TextView tvw; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); image = (ImageView) findViewById(R.id.image); mProgress = (ProgressBar) findViewById(R.id.progress); tvw = (TextView) findViewById(R.id.text); //注意每次需new一个实例,新建的任务只能执行一次,否则会出现异常 DownloadImageTask downloadImageTask = new DownloadImageTask(); //请求的url 的地址 String url = "http://imgsrc.baidu.com/forum/w%3D580/sign=ea1cfd23e0cd7b89e96c3a8b3f254291/05950a7b02087bf434caaa00f4d3572c11dfcf31.jpg"; //执行下载图片的请求 downloadImageTask.execute(url); } //重写AsyncTask 来实现请求 private class DownloadImageTask extends AsyncTask<String, Integer, byte[]> { @Override protected byte[] doInBackground(String... params) { Log.i(TAG, "doInBackground(Params... params) called"); try { //请求的HttpClient HttpClient client = new DefaultHttpClient(); //get请求 HttpGet get = new HttpGet(params[0]); //返回值 HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //干活的实体 HttpEntity entity = response.getEntity(); InputStream inputstream = entity.getContent(); long total = entity.getContentLength(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int count = 0; int length = -1; //数据读取 while ((length = inputstream.read(buf))!=-1){ baos.write(buf,0,length); count+=length; //通知进度条更新 publishProgress((int) ((count / (float) total) * 100)); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } return baos.toByteArray(); } } catch (IOException e) { e.printStackTrace(); } return null; } //数据准备和初始化 @Override protected void onPreExecute() { Log.i(TAG, "onPreExecute() called"); tvw.setText("loading"); super.onPreExecute(); } //成功之后获得的数据 @Override protected void onPostExecute(byte[] bytes) { super.onPostExecute(bytes); Log.i(TAG, "onPostExecute(Result result) called"); tvw.setText("loading is finish"); image.setImageBitmap(Bytes2Bitmap(bytes)); mProgress.setVisibility(View.INVISIBLE); } //进度条更新 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); Log.i(TAG, values[0]+""); mProgress.setProgress(values[0]); tvw.setText("loading..." + values[0] + "%"); } } //byte 2 bitmap public Bitmap Bytes2Bitmap(byte[] b) { if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; } }}
AsyncTask 源码解析
Android AsyncTask完全解析,带你从源码的角度彻底理解
详解Android中AsyncTask的使用
0 0
- AsyncTask 总结
- AsyncTask总结
- AsyncTask总结
- AsyncTask 总结
- AsyncTask总结
- AsyncTask总结
- android AsyncTask使用总结
- AsyncTask的用法总结
- AsyncTask的用法总结
- AsyncTask的用法总结
- AsyncTask的用法总结
- AsyncTask学习总结
- AsyncTask使用总结
- AsyncTask的最好总结
- Asynctask个人总结
- Android- AsyncTask 总结
- AsyncTask类简单总结
- android AsyncTask 总结
- 【Mybatis】Mapped Statements collection does not contain value for的解决方案
- 日经春秋 20151116
- 将时间字段分割成yyyy、mm、dd格式
- 【云杂谈】《公共云被用于黑客和恐怖活动的风险》
- 数组赋值
- AsyncTask 总结
- 行列转换
- JavaScript和JQuery和angularjs操作select
- Apache mina :IoBuffer
- 【bzoj4062】[Cerc2012]Jewel heist
- Android开发工具全面转向Android Studio
- ant简介
- HTTP响应头信息和请求头信息详解
- Bootstrap边学边记