Android中有几种实现异步任务的方式,比如Handler,比如AsyncTask,Handler比较复杂,今天就不写了,相信不少童鞋都使用过AsyncTask,当然也有不少童鞋还不知道怎么用AsyncTask,今天就写下AsyncTask。AsyncTask和Handler有一些区别,简单来说就是单个异步任务时使用AsyncTask比较简单,多个异步任务时使用Handler比较方便。
AsyncTask有几个重要的是方法,来讲下常用的几个方法,以下是Demo:
/**
* 主界面
*
* @author yuzhentao
*/
public class MainActivity extends Activity {
private FrameLayout fl;
private ProgressBar pb;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView();
initView();
}
private void setContentView() {
setContentView(R.layout.activity_main);
}
private void initView() {
fl = (FrameLayout) findViewById(R.id.framelayout_activity_main);
pb = (ProgressBar) findViewById(R.id.progressBar_activity_main);
tv = (TextView) findViewById(R.id.textview_activity_main);
findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AsyncTask<Integer, Integer, String>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
fl.setVisibility(View.VISIBLE);
tv.setText("0%");
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
fl.setVisibility(View.INVISIBLE);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
String progress = values[0] + "%";
pb.setProgress(values[0]);
tv.setText(progress);
}
@Override
protected String doInBackground(Integer... params) {
int i;
for (i = 0; i <= 100; i += 10) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i);
}
return "异步任务执行完成";
}
}.execute();
}
});
}
}
AsyncTask有3个参数
AsyncTask<Params, Progress, Result>
第一个参数用在doInBackground()中,这个参数的值由execute()传入。
第二个参数用在onProgressUpdate()中,这个参数的值由doInBackground()中的publishProgress()传入。
第三个参数用在onPostExecute()中,这个参数的值由doInBackground()返回的值传入。
doInBackground()中不能执行UI相关的操作,不能在主线程执行,这些操作用在onProgressUpdate()、onPreExecute()和onPostExecute()中,doInBackground()是AsyncTask用来执行异步任务的核心,这里面可以做一些耗时的操作。
onPreExecute()用在异步任务执行前,onPostExecute()用在异步任务执行后,onProgressUpdate()用在异步任务执行时。
好,大概就是这样,最后是效果图: