1.介绍
AsyncTask(了解即可),重点掌握Handler+Thread
2.实现方法
3.执行步骤
4.java后台
package com.lucky.test36asynctask; import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { Button button1; TextView textView; ProgressDialog progressDialog; //定义一个进度对话框 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1=findViewById(R.id.button); textView=findViewById(R.id.textview); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyAsyncTask myAsyncTask=new MyAsyncTask(MainActivity.this); myAsyncTask.execute(new Integer(0)); } }); } @SuppressLint("StaticFieldLeak") private class MyAsyncTask extends AsyncTask<Integer,Integer,String>{ public Context context1; //构造方法 public MyAsyncTask(Context context){ this.context1=context; } //在异步任务执行之前执行的操作 @Override protected void onPreExecute() { progressDialog=new ProgressDialog(context1); //实例化进度对话框 progressDialog.setIcon(R.mipmap.ic_launcher); //设置图标 progressDialog.setTitle("提示"); //设置标题 progressDialog.setMessage("任务正在进行"); //设置内容 progressDialog.setMax(100); //设置进度条的最大值 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //设置进度对话框的样式 progressDialog.show(); //显示进度对话框 } //执行耗时任务 @Override protected String doInBackground(Integer... integers) { int i=integers[0]; for (int j = i; j <100 ; j++) { publishProgress(j); //发布进度值到更新任务 try { Thread.sleep(100); //延时0.1s } catch (InterruptedException e) { e.printStackTrace(); } } return "任务已经完成"; } //任务结束后执行的任务 @Override protected void onPostExecute(String s) { super.onPostExecute(s); progressDialog.dismiss();//关闭进度对话框 textView.setText(s); //注意:s来自于doInBackground执行完成后的return返回值 } //更新任务 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); progressDialog.setProgress(values[0]); //接收doInBackground发布的进度值,更新进度值 } } }
5.效果图
对应的工程名:test36