本片介绍了AsyncTask的使用,实现异步执行.
首先我们先做一个简单布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/Text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/btnCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cancel" /> </LinearLayout>
下面我们看代码:
package com.zb; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class AnytaskDemoActivity extends Activity { private TextView textView; private Button button; private mAsyncTask task; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView=(TextView) findViewById(R.id.Text); textView.setText("准备"); button=(Button) findViewById(R.id.btnCancel); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { task.cancel(true); } }); task=new mAsyncTask(); task.execute("haha"); } /** * 参数1 向后台任务执行方法传递的参数 * 参数2 后台任务执行过程中,UI线程处理的中间状态,一般是UI处理中传递的参数类型 * 参数3 后台任务执行完返回时的参数类型 * @author zhangbo * */ private class mAsyncTask extends AsyncTask<String, String, String>{ /** * 执行任务 */ @Override protected String/*参数3*/ doInBackground(String... params/*参数1*/) { String per=params[0]; for(int i=0;i<5;i++){ publishProgress(per+i); SystemClock.sleep(1000); } return "结束"; } /** * 任务完成 */ @Override protected void onPostExecute(String result/*参数3*/) { super.onPostExecute(result); Toast.makeText(AnytaskDemoActivity.this,result, Toast.LENGTH_SHORT).show(); textView.setText(result); } /** * 开始任务 */ @Override protected void onPreExecute() { super.onPreExecute(); Toast.makeText(AnytaskDemoActivity.this,"开始执行任务", Toast.LENGTH_SHORT).show(); } /** * 任务执行时的更新 */ @Override protected void onProgressUpdate(String... values/*参数2*/) { super.onProgressUpdate(values); textView.setText(values[0]); } /** * 任务取消 */ @Override protected void onCancelled() { super.onCancelled(); Toast.makeText(AnytaskDemoActivity.this,"cancelled", Toast.LENGTH_SHORT).show(); } } }
这样我们就实现了异步更新的过程.
1个asyncTask只能使用一次,当你想再次使用的话,只好再new一个任务,否则要报异常的。