Android中的AsyncTask的 简单使用

AsyncTask是什么

  • AsyncTask是一个抽象类,它是Android封装的一个轻量级(使用方便,代码简介)异步类,它可以在线程中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。
  • AsyncTask是一个抽象泛型类,它有三个泛型参数
    Params:开始异步执行时传入的参数类型
    Progress:异步任务执行过程中,返回下载的进度值的类型
    Result:异步任务执行完成后,返回结果类型
    如果不需要传递具体的参数,则可以用Void来代替

AsyncTask怎么用

在Activity中采用内部类继承AsyncTask使用,让后使用里面的方法

 class DownlondTask extends AsyncTask<String, String,String>//括号内为三个泛型参数,在这里用来String

AsyncTask各个方法的作用

onPreExecute():这个方法会在后台任务开始执行之间调用,在主线程执行。用于进行一些界面上的初始化操作,比如显示一个进度条对话框等
doInBackground(Params):在这个方法中所有的代码就会在子线程中运行
注意的是在这个方法中是不能对UI进行操作的
onPostExecute(Result):该方法当doInBackground执行完毕后并通过return语句返回时调用,返回的参数会传递到此方法中
onProgressUpdate(Progress…):调用publishProgress()方法后,这个参数就会很快的被调用,方法中携带的参数就是在后台任务中传递过来的。 在这个方法中可以进行对UI的操作,在主线程中进行,利用参数中的数值就可以对界面元素进行相应的更新
上面几个方法的调用顺序:
onPreExecute() –> doInBackground() –> publishProgress() –> onProgressUpdate() –> onPostExecute()

什么是泛型参数

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

什么是长度可变的参数列表

protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            tv_show.setText(values[0]);
        }

上述代码中的String… values,String…可以说是一个长度可变的String类型的参数,所以values我们要写成一个数组

public void  add(int...ints){

    }
add(1,2,3,4,5)

我们可以在 add方法中无限的添值

案列解析–倒计时Demo

package com.example.dfcn.sexmouth;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class AsyncTaskActivity extends AppCompatActivity {
private TextView tv_show;
private Button btn_start;
private int time=10;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_async_task);
        tv_show=findViewById(R.id.tv_show);
        btn_start=findViewById(R.id.btn_start);
        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new DownlondTask().execute();//开始执行AsyncTask
            }
        });
    }


    class DownlondTask extends AsyncTask<String, String,String>{



        @Override
        /**
         * 在这个方法中所有的代码就会在子线程中运行
         * 注意的是在这个方法中是不能对UI进行操作的
         */
        protected String doInBackground(String... strings) {
            while (time>0) {
                publishProgress(time+"");
                try {
                    Thread.sleep(1000);
                    time--;
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            String s="下载完成";
            return String.valueOf(s);
        }

        @Override
        /**
         * 该方法当doInBackground执行完毕后并通过return语句返回时调用,返回的参数会传递到此方法中
         */
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            tv_show.setText(s);
        }

        @Override
        /**
         * 调用publishProgress()方法后,这个参数就会很快的被调用,方法中携带的参数就是在后台任务中传递过来的。
         * 在这个方法中可以进行对UI的操作,在主线程中进行,利用参数中的数值就可以对界面元素进行相应的更新
         */

        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            tv_show.setText(values[0]);
        }
    }

}

这里写图片描述这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值