文章目录
- AsyncTask的定义
- 作用
- 优点
- 常用方法和方法的执行顺序
- 进度条例子
- 布局
- MyAsyncTack类
- MainActivity类
- 效果
AsyncTask的定义
1、一个Android 已封装好的轻量级异步类
2、 属于抽象类,即使用时需 实现子类
作用
1、实现多线程
在工作线程中执行任务,如 耗时任务
2、异步通信、消息传递
实现工作线程 & 主线程(UI线程)之间的通信,即:将工作线程的执行结果传递给主线程,从而在主线程中执行相关的UI操作
优点
- 方便实现异步通信
不需使用 “任务线程(如继承Thread类) + Handler”的复杂组合 - 节省资源(轻量级)
采用线程池的缓存线程 + 复用线程,避免了频繁创建 & 销毁线程所带来的系统资源开销
常用方法和方法的执行顺序
进度条例子
布局
<ProgressBarandroid:layout_marginTop&#61;"30dp"style&#61;"?android:attr/progressBarStyleHorizontal"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:id&#61;"&#64;&#43;id/progressBar"/><TextViewandroid:id&#61;"&#64;&#43;id/tv_num"android:layout_width&#61;"wrap_content"android:layout_height&#61;"wrap_content"android:text&#61;" 0 / 100"/><Buttonandroid:layout_marginLeft&#61;"100dp"android:text&#61;"start"android:layout_width&#61;"wrap_content"android:layout_height&#61;"wrap_content" android:id&#61;"&#64;&#43;id/b9"/>
MyAsyncTack类
package com.test;import android.os.AsyncTask;
import android.os.Handler;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MyAsyncTask extends AsyncTask<Integer,Integer,String> {private TextView textView;private ProgressBar progressBar;public MyAsyncTask(TextView textView,ProgressBar progressBar) {super();this.textView &#61; textView;this.progressBar &#61; progressBar;}&#64;Overrideprotected void onPreExecute() {super.onPreExecute();}&#64;Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);textView.setText("加载完成!");}&#64;Overrideprotected void onProgressUpdate(final Integer... values) {super.onProgressUpdate(values);progressBar.setProgress(values[0]);textView.setText("loading..."&#43;values[0]&#43;"%");}&#64;Overrideprotected String doInBackground(Integer... integers) {int i&#61;0;for (i &#61; 10; i <&#61;100 ; i&#43;&#61;10) {try{Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}publishProgress(i);}return i&#43;integers[0].intValue()&#43;"";}
}
MainActivity类
public class MainActivity extends AppCompatActivity implements View.OnClickListener{private ProgressBar progressBar;private TextView tv;private Button b9;&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);b9 &#61; findViewById(R.id.b9);progressBar &#61; findViewById(R.id.progressBar);tv &#61; findViewById(R.id.tv_num);b9.setOnClickListener(new View.OnClickListener() {&#64;Overridepublic void onClick(View view) {MyAsyncTask myAsyncTask &#61; new MyAsyncTask(tv,progressBar);myAsyncTask.execute(100);}});}}
效果
本文参考文章地址和图片出处