Android异步操作AsyncTask学习

本文介绍了Android中异步任务AsyncTask的使用,包括其泛型参数、回调方法、生命周期管理和注意事项。示例展示了如何在异步任务中加载网络图片和更新进度条,强调了在UI线程中创建和执行AsyncTask的重要性以及如何在Activity的生命周期中管理异步任务。
摘要由CSDN通过智能技术生成

今天开始写博客,目的就是为了方便记录学习的一些要点,同时也和大家交流。
第一篇是关于Android的异步任务(AsyncTask)的。异步任务是为了在其它线程中更新UI。AsyncTask是一个抽象类,通常用于继承。
构建AsyncTask子类的泛型参数
AsyncTask是一个抽象类,通常用于被继承.继承AsyncTask需要指定如下三个泛型参数:
Params:启动任务时输入的参数类型.
Progress:后台任务执行中返回进度值的类型.
Result:后台任务执行完成后返回结果的类型.

.构建AsyncTask子类的回调方法
AsyncTask主要有如下几个方法:

doInBackground:必须重写,异步执行后台线程要完成的任务,耗时操作将在此方法中完成.
onPreExecute:执行后台耗时操作前被调用,通常用于进行初始化操作.
onPostExecute:当doInBackground方法完成后,系统将自动调用此方法,并将doInBackground方法返回的值传入此方法.通过此方法进行UI的更新.
onProgressUpdate:当在doInBackground方法中调用publishProgress方法更新任务执行进度后,将调用此方法.通过此方法我们可以知晓任务的完成进度.

onPreExecute方法会首先执行,之后执行doInBackground方法,最后执行onPostExecute方法。onProgressUpdate方法需要在doInBackground方法中手动调用。

下面展示使用异步处理加载网络图片.网络操作作为一个不稳定的耗时操作,从4.0开始就被严禁放入主线程中.所以在显示一张网络图片时,我们需要在异步处理中下载图片,并在UI线程中设置图片.

ImageTest.java
用于处理异步操作,从网络中加载图片


import java.io.BufferedInputStream;
import java.net.URL;

import java.io.IOException;
import java.io.InputStream;
import java.net.URLConnection;


public class ImageTest extends Activity {
   

    private ImageView imageView;
    private ProgressBar progressBar;
    private static String URL = "http://www.deskcar.com/desktop/fengjing/2013812103350/11.jpg";//图片地址
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image);
        imageView = (ImageView)findViewById(R.id.image);
        progressBar = (ProgressBar)findViewById(R.id.progress);
        //通过AsyncTask的execute方法开启异步线程操作,传递的参数是doInBackground方法中的参数
        new MyAsyncTask().execute(URL);
    }

    //通过一个内部类实现异步操作
    class MyAsyncTask extends AsyncTask<String,Void,Bitmap>{

        /**
         * 对异步操作进行初始化操作
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            progressBar.setVisibility(View.GONE);
            imageView.setImageBitmap(bitmap);
        }

        /**
         * 进行异步操作
         * @param params
         * @return 返回AsyncTask中的第三个参数类型
         */
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值