Android AsyncTask是一个轻量级的异步任务处理类 常见的使用步骤-创建一个继承自AsyncTask类的异步任务处理类 (AsyncTaskParams,Progress,Result Params启动任务执行的输入参数,比如一组URL Progress后台
Android AsyncTask是一个轻量级的异步任务处理类
常见的使用步骤->创建一个继承自AsyncTask类的异步任务处理类
(AsyncTask<Params,Progress,Result>
Params启动任务执行的输入参数,比如一组URL
Progress后台任务执行的百分比
Result执行完任务后的返回结果)
class MyAsyncTask extends AsyncTask<Integer, Integer, String> { @Override protected String doInBackground(Integer... params) { //运行在工作线程 //在onPreExecute方法执行完成后马上执行,负责执行 //耗时的后台处理任务,可调用publishProgress方法实 //时更新任务进度 } @Override protected void onPreExecute() { //运行在UI线程 //在执行后台耗时操作之前,通常用于一些初始化操作,比如进度条显示 } @Override protected void onProgressUpdate(Integer... values) { //运行在UI线程 //在doBackground方法中,每次调用publishProgress方法都会触发该方法 } }
->在UI线程创建MyAsyncTask实例
->在UI线程中调用mAsyncTask.execute()
一个完整的例子
MainActivity
package com.example.myfirstapp; 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 android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView txttitle; private ProgressBar pgbar; private Button btnupdate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txttitle = (TextView)findViewById(R.id.txttitle); pgbar = (ProgressBar)findViewById(R.id.pgbar); btnupdate = (Button)findViewById(R.id.btnupdate); btnupdate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyAsyncTask myTask = new MyAsyncTask(txttitle,pgbar); myTask.execute(1000); } }); } } class DelayOperator { //延时操作,用来模拟下载 public void delay() { try { Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace();; } } } class MyAsyncTask extends AsyncTask<Integer,Integer,String> { private TextView txt; private ProgressBar pgbar; public MyAsyncTask(TextView txt,ProgressBar pgbar) { super(); this.txt = txt; this.pgbar = pgbar; } //该方法不运行在UI线程中,主要用于异步操作,通过调用publishProgress()方法 //触发onProgressUpdate对UI进行操作 @Override protected String doInBackground(Integer... params) { DelayOperator dop = new DelayOperator(); int i = 0; for (i = 10;i <= 100;i+=10) { dop.delay(); publishProgress(i); } //i + params[0].intValue() return ""; } //该方法运行在UI线程中,可对UI控件进行设置 @Override protected void onPreExecute() { txt.setText("开始执行异步线程~"); } //在doBackground方法中,每次调用publishProgress方法都会触发该方法 //运行在UI线程中,可对UI控件进行操作 @Override protected void onProgressUpdate(Integer... values) { pgbar.setProgress(values[0].intValue()); } }
布局代码
activity_main
<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=".MyActivity"> <TextView android:id="@+id/txttitle" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!--设置一个进度条,并且设置为水平方向--> <ProgressBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/pgbar" style="?android:attr/progressBarStyleHorizontal"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnupdate" android:text="更新progressBar"/> </LinearLayout>