标签:
能够在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这种方法能够不用实现。
package com.example.android_asynctask;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
 private Button downbtn;
 private TextView textView;
 private ProgressBar progressBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        downbtn = (Button)findViewById(R.id.download);
        textView = (TextView)findViewById(R.id.text);
        progressBar = (ProgressBar)findViewById(R.id.progressBar);
        final DownloadTest download = new DownloadTest(textView,progressBar);	//获取一个DownloadTest对象。并传递组件对象參数
        downbtn.setOnClickListener(new OnClickListener()
        {
   @Override
   public void onClick(View v) {
    download.execute(200);
   }
        });
       
    }
}package com.example.android_asynctask;
import android.graphics.Color;
import android.os.AsyncTask;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class DownloadTest extends AsyncTask<Integer,Integer,String>
{
 private TextView tv;
 private ProgressBar pb;
 //带參数构造方法
 DownloadTest(TextView text,ProgressBar bar)
 {
  this.tv = text;
  this.pb = bar;
 }
 //不带參数构造方法
 DownloadTest()
 {
 }
 /*1.onPreExecute方法
  * 为子线程(后台)执行初始化相关内容
  */
 protected void onPreExecute() {
      tv.setVisibility(View.VISIBLE);	 //设置显示文本组件
      pb.setVisibility(View.VISIBLE);	 //设置显示运行进度条
      super.onPreExecute();
 }
 /*2.doInBackground方法
  *  执行一个后台线程,该线程实现每arg0[0]毫秒调用一次onProgressUpdate方法
  */
 protected String doInBackground(Integer... arg0) {
  for(int i=0;i<100;i++)
  {
   publishProgress(i);	 //调用onProgressUpdate方法并传递參数i
   try {
    Thread.sleep(arg0[0]);	//累加一次,线程休眠argo[0]毫秒
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
  return "完成下载";	 //后台子线程执行完成后。返回的值
 }
 /*3.onProgressUpdate方法
  * 调用publishProgress(i)时调用该方法,并传递參数i给形參values[0]*/
 @Override
 protected void onProgressUpdate(Integer... values) {
  pb.setProgress(values[0]);	 //设置进度条值
  tv.setText("已经下载"+values[0]+"%");	 //文本组件显示提示信息
  super.onProgressUpdate(values);
 }
 /*4.onPostExecute
  * 处理后台线程得到的结果
  * */
 protected void onPostExecute(String result) {
  pb.setVisibility(View.INVISIBLE);	//隐藏进度条
  tv.setVisibility(View.VISIBLE);	//显示UI文本显示框组件
  tv.setText(result);
  tv.setTextSize(20);
  tv.setTextColor(Color.RED);
  super.onPostExecute(result);
 }
}
然后,在新创建的子线程中调用doInBackground()方法实现后台线程功能并通过publishProgress()方法调用onProgressUpdate()方法更新UI内容,最后在主线中执行onPostExecute方法来处理后台线程执行的结果。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Android备注26.Android异步任务(AsyncTask)
标签:
原文地址:http://www.cnblogs.com/gcczhongduan/p/4678403.html