AsyncTack定义了3种泛型类型,
1.Params启动任务执行输入的参数,例如Http请求的Url地址
2.Progress后台执行进度条的百分比
3.Result 后台执行最终返回的结果,比如String
AsyncTackActivity.java
public class AsyncTackActivity extends Activity {
private Context context;// 上下文
private TextView txt;
private ProgressBar pro;
private Button btn;
private Integer progressBarCount;// 1.0
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置吧显示标题栏--需要在创建视图之前设置
setContentView(R.layout.activity_async_tack);
context = this;// 上下文赋值
InitView();
}
private void InitView() {
txt = (TextView) this.findViewById(R.id.textView1);
pro = (ProgressBar) this.findViewById(R.id.progressBar1);
btn = (Button) this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new MyAsyncTack().execute();// 异步执行
}
});
}
private class MyAsyncTack extends AsyncTask<Void, Integer, Void> {// 洗衣服例子
protected void onPreExecute() {// 1.准备阶段---水,洗衣粉,浸泡
super.onPreExecute();
txt.setText("0%");// 进度显示
pro.setProgress(0);
progressBarCount = 0;// 1.1进度计时器
btn.setEnabled(false);
}
protected Void doInBackground(Void... params) {// 2.耗时操作---子线程一件一件的洗
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(500);
progressBarCount++;// 1.2增加
publishProgress(progressBarCount);// 1.3发送给onProgressUpdate()
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
protected void onProgressUpdate(Integer... values) {// 3.更新进度条
txt.setText((values[0] * 10) + "%");// 1.4进度显示
pro.setProgress(values[0] * 10);// 1.5
}
protected void onPostExecute(Void result) {// 4.主线程UI更新处理结果洗了1件2件....
super.onPostExecute(result);
txt.setText(progressBarCount * 10 + "%");// 进度显示
pro.setProgress(progressBarCount * 10);
btn.setEnabled(true);
}
protected void onCancelled() {// 5.取消
super.onCancelled();
}
}
}
activity_async_tack.xml
<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"
tools:context=".AsyncTackActivity" >
<!-- 进度条显示 -->
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="10dp"
android:text="0%" />
<!-- 进度条 -->
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="开始" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/progressBar1"
android:layout_centerHorizontal="true"
android:layout_marginTop="125dp"
android:ems="10" >
<requestFocus />
</EditText>
</RelativeLayout>