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
原创粉丝点击