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是二级进度条