异步任务,是Handler的简化版,不需要实现多个方法;
本质上依然是由Handler实现,其内部封装了一个简单的线程池
但也因此不建议进行叫复杂的耗时操作如网络请求等
创建一个内部类继承于AsyncTask
public class MainActivity extends AppCompatActivity {
private TextView tv;
MyAsyncTask task;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
task=new MyAsyncTask();
//调用AsyncTask的execute()开始异步任务,但是注意新建的任务只能执行一次,否则会出现异常
task.execute("");
}
//三种泛型类型分别代表“启动任务执行的输入参数”、“后台任务执行的进度”、“后台计算结果的类型”。
// 在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用Java.lang.Void类型代替。
public class MyAsyncTask extends AsyncTask<String, Integer, String> {
//在后台任务开始前执行的ui操作,如弹出一个进度提示框
protected void onPreExecute() {
tv.setText("准备好.... 憋气100秒!");
}
int x=0;
//耗时操作
protected String doInBackground(String... strings) {
while(x<100){
try {
Thread.sleep(1000);
x++;
//publishProgress(第二个泛型),来调用onProgressUpdate()方法,更新提示信息
publishProgress(x);
} catch (InterruptedException e) {
}
}
return (x+"");
}
//更新进度条更更改ui的操作
@Override
protected void onProgressUpdate(Integer... values) {
int value= values[0];
tv.setText(value+"");
}
//后台任务完成后执行,比如取消进度条
@Override
protected void onPostExecute(String s) {
tv.setText("游戏结束");
}
}
}