AsyncTask异步任务线程控制

目录

一、项目内容

二、使用步骤

三、代码实现

1.项目结构

2.主要样式 activity_main.xml

3.MainActivity

4.MyAsyncTest 异步任务类

四、运行效果

五、总结

扫描二维码关注公众号,回复: 15337932 查看本文章

一、项目内容

使用AsyncTask设计一个异步任务:异步进度条加载,后显示加载图片。

开发环境:Android Studio、Android SDK 11.0

二、使用步骤

1.自定义MyAsyncTask类继承AsyncTask 
2.定义AsyncTask的三种泛型参数
3.重写方法相关方法
4.调用execute方法执行异步任务

三、代码实现

1.项目结构

2.主要样式 activity_main.xml

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


    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        tools:srcCompat="@tools:sample/avatars" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="0" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="点击加载" />

</LinearLayout>

3.MainActivity

package com.example.the_asynctask;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {

    static Button button;
    static ProgressBar progressBar;
    static ImageView imageView;
    Context context = this;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        progressBar = findViewById(R.id.progressBar);
        imageView = findViewById(R.id.imageView);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new MyAsyncTask(context).execute();
            }
        });
    }
}

4.MyAsyncTest 异步任务类

package com.example.the_asynctask;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.bumptech.glide.Glide;

import java.util.Random;

import okhttp3.Call;

class MyAsyncTask extends AsyncTask<String,Integer,String>{
    Context context;
    MyAsyncTask(Context context)
    {
        this.context = context;
    }
    @Override
    protected void onPreExecute() {
        MainActivity.progressBar.setVisibility(View.VISIBLE);
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... strings) {
        int step = 1;
        try {
            while (step <= 100) {
                Random r = new Random();
                publishProgress(step+=r.nextInt(10));
                Thread.sleep(50);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        OkhttpUtil.okHttpGetBitmap("https://tse1-mm.cn.bing.net/th/id/R-C.2fd0dadf9d13c716cf0494d17875cf3b?rik=mf3ZQjupoBDr2A&riu=http%3a%2f%2fup.36992.com%2fpic%2f07%2fd3%2fe8%2f07d3e81f37f5922b5b0021a1c0b2d3da.jpg&ehk=P8hpii3cUJykmCt97WX0kATyROzUNRuexj8faXE7q6c%3d&risl=&pid=ImgRaw&r=0", new CallBackUtil.CallBackBitmap() {
            @Override
            public void onFailure(Call call, Exception e) {

            }

            @Override
            public void onResponse(Bitmap response) {
                MainActivity.imageView.setImageBitmap(response);
            }
        });

        return "下载完成";
    }

    @Override
    protected void onPostExecute(String s) {
        MainActivity.button.setText(s);
        super.onPostExecute(s);
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        MainActivity.progressBar.setProgress(values[0]); //更新ProgressBar
        super.onProgressUpdate(values);
        MainActivity.button.setText("后台正在下载...");

    }
}

用到了三个工具类CallBackUtil、OkhttpUtil、RequestUtil

参考:okhttp,get,post,put,delete 请求_魔地主的博客-CSDN博客_okhttpclient put请求

四、运行效果

五、总结

        本文记录了异步任务最基本的使用实现过程,相关问题通过一些参考解决。

猜你喜欢

转载自blog.csdn.net/miKyrie/article/details/125009198
今日推荐