标签:
能够在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这种方法能够不用实现。
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