欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

AsyncTask的简单实用

程序员文章站 2022-03-11 22:57:31
1.基本描述1.1.AsyncTask是Android提供的轻量级( 实现代码量少) 的异步类。1.2.为了降低异步通信的开发难度,提供了AsyncTask。1.3.AsyncTask直接继承于0bject类,位于android.os包中。1.4.使用AsyncTask可以忽略Looper、MessageQueue、Handler等复杂对象,更便捷的完成异步耗时操作。2.简单使用:2.1.extends AsyncTask....

1.基本描述

1.1.AsyncTask是Android提供的轻量级( 实现代码量少) 的异步类。
1.2.为了降低异步通信的开发难度,提供了AsyncTask。
1.3.AsyncTask直接继承于0bject类,位于android.os包中。
1.4.使用AsyncTask可以忽略Looper、MessageQueue、Handler等复杂对象,更便捷的完成异步耗时操作。

2.简单使用:

 

2.1.extends AsyncTask<Params, Progress, Result>

继承AsyncTask 

/**
 * Params, the type of the parameters sent to the task uponexecution.在执行AsyncTask需要传入的参数,可用于在后台任务中使用
 * Progress, the type of the progress units published during the background computation.后台任务执行时,UI显示当前进度,
 * Result, the type of the result of the background computation. 执行完毕需要对结果进行返回
 */

2.2.实现必要方法:

异步的代码基本都在这里完成

@Override
protected Boolean doInBackground(Void... voids) {
    return null;
}
子线程中执行 完成后通过return返回结果 但是此方法并不能进行UI操作

2.3.重写其他几个方法

  //后台任务开始执行前调用,用于界面的初始化操作,比如显示出精度条
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
          
        }
  //进行UI操作
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
           
        }

        //任务完毕调用 可以执行UI操作比如关闭进度条
        @Override
        protected void onPostExecute(Boolean aBoolean) {
           super.onPostExecute(aBoolean);
          
        }

2.4.启动

new myAsyncTask().execute();

3.完整代码举例:

AsyncTask的简单实用

package com.example.myasynctaskdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

import org.w3c.dom.DOMImplementation;

import java.util.function.DoubleToIntFunction;

public class MainActivity extends AppCompatActivity {
    private ProgressBar pb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button3 = findViewById(R.id.button3);
        pb = findViewById(R.id.pb);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new UpDataTask().execute();
            }
        });
    }

    /**
     * Params, the type of the parameters sent to the task uponexecution.在执行AsyncTask需要传入的参数,可用于在后台任务中使用
     * Progress, the type of the progress units published during the background computation.后台任务执行时,UI显示当前进度,
     * Result, the type of the result of the background computation. 执行完毕需要对结果进行返回
     */
    class UpDataTask extends AsyncTask<Void, Integer, Boolean> {



        //后台任务开始执行前调用,用于界面的初始化操作,比如显示出精度条
        @Override
        protected void onPreExecute() {
//            super.onPreExecute();
            pb.setVisibility(View.VISIBLE);
        }

        //子线程中执行 完成后通过return返回结果 但是此方法并不能进行UI操作
        @Override
        protected Boolean doInBackground(Void... voids) {

            int count = 0;
            while (true) {
                try {
                    count++;
                    publishProgress(count);//反馈任务执行进度 调用后很快会调用onProgressUpdate
                    if (count > 100)
                        break;
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return true;
        }



        //进行UI操作
        @Override
        protected void onProgressUpdate(Integer... values) {
//            super.onProgressUpdate(values);
            pb.setProgress(values[0]);
        }

        //任务完毕调用 可以执行UI操作比如关闭进度条
        @Override
        protected void onPostExecute(Boolean aBoolean) {
//            super.onPostExecute(aBoolean);
            pb.setVisibility(View.GONE);
        }
    }
}

对应的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开启异步" />

    <ProgressBar
        android:id="@+id/pb"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:visibility="gone" />

</LinearLayout>

转发表明出处https://blog.csdn.net/qq_35698774/article/details/107394945

点击下载

android互助群:

AsyncTask的简单实用

 

本文地址:https://blog.csdn.net/qq_35698774/article/details/107394945