您的位置:首页 > 移动开发 > Android开发

Android学习之异步任务AsyncTask

2016-02-29 15:58 561 查看
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()用在异步任务执行时。

好,大概就是这样,最后是效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: