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

AsyncTask的基本结构:

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

  • 构建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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/lpcrazyboy/article/details/80811377
今日推荐