Android中的AsyncTask异步类
来源:互联网 发布:淘宝女包店推荐 编辑:程序博客网 时间:2024/05/29 18:36
AsyncTask类是Android异步任务处理的主要类(辅助类),主要是为了处理后台网络通信,然后将结果返回给UI线程,其本质是一个线程类,只是AsyncTask的处理时间较短,适用于短期操作。
通过查阅API可知:
1.AsyncTask有三种类型:Params,Progress,Result。
new AsyncTask<Params,Progress,Result>()//其中,Params:表示执行时传入的参数类型;Progress:表示在后台处理时发布的进度单位类型;Result:处理完返回数据类型。2.执行异步任务时,需要通过4个步骤
1>onPostExecute(Result),这个方法在任务执行前在UI线程中调用,任务执行结果作为此方法的参数返回。
2>doInBackground(Params...),这个方法是必须要复写的,其中主要执行耗时的网络操作,运行时在后台运行。
3>onPreExecute(),此方法通常用来设置任务,例如在户用界面显示进度条等,在任务执行前在主线程中调用。
4>onProgressUpdate(Progress...),此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可以用于动画进度条或在文本字段中显示日志。
3.同时,必须遵守一些线程规则:
1>AsyncTask类必须在UI线程中加载。
2>该异步任务的实例化对象必须在Ui线程中创建。
3>.execute()方法必须在UI线程中调用。
4> 上述的几种默认方法,不可以手动调用。
5>该任务只能执行一次,否则会抛出异常。
4.异步类一般使用步骤
实例化AsyncTask子类对象,至少继承和重写其doInBackground(Params...)、onPostExecute(Result)两个方法,调用.execute()方法开启任务。
5.下面是一个具体的加载一张网页图片的实例。
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;public class WebActivity extends AppCompatActivity { ImageView imageView; Bitmap bm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); imageView = (ImageView) findViewById(R.id.imageView); ShowPictrue("http://pic.qiantucdn.com/58pic/13/12/24/21E58PICfx8_1024.jpg!/format/webp"); } public void ShowPictrue(String url) { new AsyncTask<String, Void, String>() { @Override protected String doInBackground(String... params) { try { URL url = new URL(params[0]); InputStream is = url.openStream(); bm = BitmapFactory.decodeStream(is); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } protected void onPostExecute(String s) { super.onPostExecute(s); imageView.setImageBitmap(bm); } }.execute(url); }}真机运行结果如下:
0 0
- 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异步加载图片
- AsyncTask of Android Android系统中的异步任务
- Android开发 AsyncTask异步任务类
- Android中异步类AsyncTask的理解
- 虚拟机开启时 VMware Authorization Service 这个服务找不到的解决办法
- C++多态性与虚函数理解
- 统计数组中各元素出现次数
- angular学习(八)—— Expressions
- 在VMware中为Linux系统安装VM-Tools的详解教程
- Android中的AsyncTask异步类
- 浅析=======Struts2之==========valueStack
- 算法训练 6-2递归求二进制表示位数
- 月赛最后一题答案
- 开始系统地学习编程知识啦。。。
- 关于vivado无法启动SDK问题的解决
- EF提示“序列化类型为XXX的对象时检测到循环引用”
- Java反射
- 搭建本地服务器