首页 > 代码库 > AsyncTask

AsyncTask

Asynctask是android对java线程的一个封装,通常用于后台线程和UI线程的交互。直接看下面实例:

主UI Activity中执行:

        mprogressbar = (ProgressBar)findViewById(R.id.progressBar1);        mtextview    = (TextView)findViewById(R.id.textView1);        mbutton      = (Button)findViewById(R.id.button1);                mprogressbar.setMax(10);                mbutton.setOnClickListener(new View.OnClickListener() {                        @Override            public void onClick(View v) {                //AsyncTask只能在UI主线程中调用,且不能多次调用                MyTask task = new MyTask(mtextview, mprogressbar);                task.execute("fredric");            }        });    

自定义AsyncTask如下:

//AsyncTask是一个抽象类,其中定义三种泛型类型//AsyncTask<Params, Progress, Result>,其中:
//Params对应调用时传入的参数(即执行doInBackGroud时的参数,由execute传入),下例为String;

//Progress为中间进度条调用的参数(即执行onProgressUpdate时的参数,下例为Integer)
//Result为执行结束后的调用的参数(即执行onPostExecute时的参数)
public
class MyTask extends AsyncTask<String, Integer, String> { private TextView mtextview; private ProgressBar mprogressbar; public MyTask(TextView mtextview, ProgressBar mprogressbar) { super(); this.mtextview = mtextview; this.mprogressbar = mprogressbar; }
//AyncTask的耗时操作定义在此函数中
//其中publishProgress可以出发执行onProgressUpdats
//该方法在onPreExecute后执行
//该方法不运行在UI线程中,因此不能对UI进行操作,下面三个方法都可以,实例中操作了文本和进度条
//UI线程在执行doInBackground后无法再向该线程发送消息; @Override
protected String doInBackground(String... params) { // TODO Auto-generated method stub int i = 0; for(i = 0; i < 10; i++){ try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { e.printStackTrace(); } } return i + "&" + params[0]; } @Override protected void onPreExecute() { mtextview.setText("开始执行线程"); } @Override protected void onProgressUpdate(Integer... values) { mprogressbar.setProgress(values[0]); } @Override protected void onPostExecute(String result) { mtextview.setText(result); }}

AsyncTask