Android开发中异步任务的基本应用(总结)

AsyncTask的基本结构:

AsyncTask是一个抽象类,一般我们都会定义一个类继承AsyncTask然后重写相关方法(以下说明图是借用于coder_pig大神的,总结的很好,和大家一起分享)

以下3个参数分别是:(可以是多种类型数据,比如,int,String,List集合,Bitmap位图等等)

Params:启动任务时的输入参数类型,myAsyncTask.excute(参数)。

progress:后台执行任务进度的传入参数类型。

Result:任务执行完成后返回的结果的数据类型,即onPostExecute(参数)这里的参数类型。

  • 构建AsyncTask子类的参数:

  • 相关方法与执行流程:

  • 注意事项:

实例效果:

MyAsyncTask.java的代码如下:

package com.deepreality.asynctaskdemo;

import android.os.AsyncTask;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MyAsyncTask extends AsyncTask<Integer,Integer,String>  {

    private TextView tvTitle;
    private ProgressBar pbarDownLoad;

    public MyAsyncTask(TextView tvTitle, ProgressBar pbarDownLoad) {
        this.tvTitle = tvTitle;
        this.pbarDownLoad = pbarDownLoad;
    }

    //该方法不运行在UI线程中,主要用于异步操作,通过调用publishProgress()方法
    //触发onProgressUpdate对UI进行操作
    @Override
    protected String doInBackground(Integer... integers) {
        DelayOperator delayOperator = new DelayOperator();
        int i = 0;
        for (i = 10; i <= 100; i += 10) {
            delayOperator.delay(1000);
            publishProgress(i);
        }
        return String.valueOf(i + integers[0].intValue());
    }

    //该方法运行在UI线程中,可对UI控件进行设置(在执行之前)
    @Override
    protected void onPreExecute() {
        tvTitle.setText("开始执行异步任务!");
    }

    //在doBackground方法中,每次调用publishProgress方法都会触发该方法
    //运行在UI线程中,可对UI控件进行操作
    @Override
    protected void onProgressUpdate(Integer... values) {
        int value = values[0];
        pbarDownLoad.setProgress(value);
    }
}

DelayOperator.java的代码如下:(这是一个延时方法)

package com.deepreality.asynctaskdemo;

public class DelayOperator {
    public void delay(int time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

MainActivity.java的代码如下:

package com.deepreality.asynctaskdemo;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tvTitle;
    private ProgressBar progressBar;
    private Button btnUpdate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        componentInit();
        componentAddClickListener();
    }

    private void componentInit() {
        tvTitle = findViewById(R.id.main_tvTitle);
        progressBar = findViewById(R.id.main_pbar);
        btnUpdate = findViewById(R.id.main_btnUpdate);
    }

    private void componentAddClickListener() {
        btnUpdate.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_btnUpdate:{
                MyAsyncTask myAsyncTask = new MyAsyncTask(tvTitle, progressBar);
                myAsyncTask.execute(1000);
                break;
            }
            default:break;
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值