AsyncTask的简单使用
一.AsyncTask简介
AsyncTask是一种轻量级的异步任务类,封装了Thread和Handler,可以很方便地执行后台任务操作以及在主线程中更新UI。但是对于特别耗时的任务来说,AsyncTask并不适合。应使用线程池执行特别耗时的任务。
二.AsyncTask
三.AsyncTask提供的四个主要方法
1.onPreExecute():在主线程中执行,在异步任务执行前调用这个方法,用于初始化一些操作,例如显示进度条等;
2.doInBackground(Params…params):在线程池中执行,用于执行异步任务,在此方法内可调用publishProgress(Progress…values)方法更新进度(publishProgress()又会调用onProgressUpdata()方法),当任务执行完毕后如果设置了返回值类型的话(即第三个泛型参数不为Void),会返回对应类型的值给onPostExecute()。
3.onProgressUpdate(Progress…values):在主线程中执行,可用与展示任务的进度;
4.onPostExecute(Result result):在主线程中执行,当异步任务执行完毕后会被调用,可将返回值展示出来或者做一些回收工作。
四.AsyncTask的简单使用
从0开始,每隔两秒钟值加1,到6位置。
public class MainActivity extends Activity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
textView = (TextView) findViewById(R.id.tv);
MyTask task = new MyTask();
task.execute();
}
class MyTask extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
for(int i=0;i < 7;i++){
publishProgress(i); //i的值每更新一次,通知onProgressUpdate(),让其在UI更新界面;
sleep(2000); //线程没循环一次睡眠2秒,这样就可以每2s就可以看到数字的变化。
}
return "任务完成"; //当任务完成后返回此String给onPostExecute();
}
@Override
protected void onProgressUpdate(Integer... values) {
textView.setText(values[0] + ""); //更新UI;
}
@Override
protected void onPostExecute(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show(); //将doInBackground()返回的值显示出来.
}
}
private void sleep(int time){
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}