AsyncTask处理是安卓中处理多个线程之间通讯的最主要的方法。
android.os.AsyncTask类:
android.os.AsyncTask<Params, Progress, Result>
在AsyncTask类中要通过泛型指定三个参数,这三个参数的作用如下:
Params:启动时需要的参数类型,例如:每次操作的休眠时间则为Integer;
Progress:后台执行任务的百分比,例如:进度条需要传递的是Integer;
Result:后台执行完毕之后返回的信息,例如:完成数据信息显示传递的是String。
No. |
方法 |
类型 |
描述 |
1 |
public final boolean cancel(booleanmayInterruptIfRunning) |
普通 |
指定是否取消当前线程操作 |
2 |
public final AsyncTask<Params, Progress, Result> execute(Params... params) |
普通 |
执行AsyncTask操作 |
3 |
public final booleanisCancelled() |
普通 |
判断子线程是否被取消 |
4 |
protected final void publishProgress(Progress... values) |
普通 |
更新线程进度 |
5 |
protected abstract Result doInBackground(Params... params) |
普通 |
在后台完成任务执行,可以调用publishProgress()方法更新线程进度 |
6 |
protected void onProgressUpdate(Progress... values) |
普通 |
在主线程中执行,用于显示任务的进度 |
7 |
protected void onPreExecute() |
普通 |
在主线程中执行,在doInBackground()之前执行 |
8 |
protected void onPostExecute(Result result) |
普通 |
在主线程中执行,方法参数为任务执行结果 |
9 |
protected void onCancelled() |
普通 |
主线程中执行,在cancel()方法之后执行 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/progressBar1" android:layout_alignParentTop="true" android:layout_marginTop="162dp" android:text="" /> <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView1" android:layout_centerHorizontal="true" android:layout_marginBottom="54dp" /> </RelativeLayout>
主程序如下:
package com.example.ASyncTask; import android.os.AsyncTask; import android.os.Bundle; import android.R.integer; import android.app.Activity; import android.view.Menu; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends Activity { private TextView info = null; private ProgressBar mybar = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); this.info = (TextView) super.findViewById(R.id.textView1); this.mybar = (ProgressBar) super.findViewById(R.id.progressBar1); new ChildUpdate().execute(100);//创建匿名对象执行程序 } private class ChildUpdate extends AsyncTask<Integer, Integer, String> { @Override protected String doInBackground(Integer... params) {// 后台处理的程序 for (int i = 0; i < 100; i++) { MainActivity.this.mybar.setProgress(i);// 执行传入操作 this.publishProgress(i);// 更新每次的那内容,把值传给onProgressupdate()进行处理 try { Thread.sleep(params[0]); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return "执行完毕"; } @Override protected void onPostExecute(String result) {// 执行完毕后的操作 MainActivity.this.info.setText(result); } @Override protected void onProgressUpdate(Integer... values) { MainActivity.this.info.setText("当前进度为:" + String.valueOf(values[0])); } } }