Android中的AsyncTask异步类

本文详细介绍了Android中AsyncTask类的使用方法,包括其三种类型Params、Progress和Result的定义,执行异步任务的四个步骤,以及必须遵守的线程规则。此外,还提供了一个加载网页图片的具体实例。

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);
    }
}
真机运行结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值