android 多线程

AsyncTask类在子线程对UI进行操作

继承AsyncTask类时指定三个参数:<Params, Progress, Result>

Params 传入的泛型参数

Progress 整形

Result 反馈结果

class RecyclerViewTask extends AsyncTask<Void, Integer, String> {

//后台任务开始执行前调用,用于界面的初始化操作

onPreExecunte(){}

//这个方法的代码会在子线程中运行,在这里处理耗时任务。任务完成后,通过return语句返回结果。这个方法不能进行UI操作

doInBackground(){}

//

}

使用AsyncTask

package com.test.admin.test;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

    public void onClick(View view){
        new pro().execute();
    }
    //
    class pro extends AsyncTask<Void,Integer,Boolean>{

        ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
        //在后台任务开始执行前调用,用于进行一些界面的初始化,如显示进度条对话框等
        @Override
        protected void onPreExecute() {

            progressDialog.setTitle("正在升级");
            progressDialog.setMessage("loading");
            //是否能用回退键取消界面
            progressDialog.setCancelable(true);
            progressDialog.show();
        }
        //里面所有的代码都会在子线程执行,处理所有的耗时任务,完后成通过retrun返回执行结果。
        //如果AsyncTask第三个参数是void,则不可返回结果。
        //这个方法不能进行UI操作,如需要更新UI元素,当前任务进度,可调用publishProgress(Progress...)完成
        @Override
        protected Boolean doInBackground(Void... params) {
            for(int i=1;i<=100;i++){
                try {
                    //延迟
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                publishProgress(i);
                if (i==100){
                    break;
                }
            }
            return true;
        }
        //在后台任务中调用了publishProgress(Progress...)方法后会调用该方法,在此方法中进行UI操作。
        @Override
        protected void onProgressUpdate(Integer... values) {
            progressDialog.setMessage("Downloaded"+values[0]+"%");
        }
        //当后台任务执行完毕并通过retrun语句进行返回时,这个方法会被调用返回的数据作为参数传到此方法。
        // 可利用该参数进行UI操作,如提醒任务执行结果,关闭进度条等
        @Override
        protected void onPostExecute(Boolean aBoolean) {
           if (aBoolean){
               progressDialog.dismiss();
               Toast.makeText(MainActivity.this,"下载成功",Toast.LENGTH_SHORT).show();
           }
        }
    }
}

 运行结果

水平进度条的显示

onPreExecute方法里添加

// 设置水平进度条
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置提示的title的图标,默认是没有的
//progressDialog.setIcon(R.mipmap.ic_launcher);
//设计进度条最大值,默认100
//progressDialog.setMax(1000);

onProgressUpdate里添加

//更新进度条进度,1是1倍增量
progressDialog.incrementProgressBy(1);
//二级进度条更新方式
//progressDialog.incrementSecondaryProgressBy(2);

1是一级进度条,2是二级进度条

原文地址:https://www.cnblogs.com/buchizaodian/p/8830167.html