在 Android中的AsyncTask异步任务的简介 一文中。已经对 安卓 异步任务操作做了简单的介绍。这里,直接将上文中的异步任务做了一个实例。实现异步操作更新UI线程,相比开启子线程更新来说逻辑性更加合理
下面内容。可直接拷贝到项目中继而运行測试
activity_main.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=".MainActivity" > <ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="58dp" /> <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/progressBar"
android:layout_marginTop="18dp"
android:text="TextView" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="Button" /> </RelativeLayout>
MainActivity.java
package com.example.asynctaskdemo; import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
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 TextView tv;
private ProgressBar progressBar; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
TestAsyncTask testAsyncTask = new TestAsyncTask();
testAsyncTask.execute(100);
}
});
tv = (TextView) findViewById(R.id.textView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
} /*
* @TestAsyncTaskInteger 參数Integer 进度String 返回值 类型
*/
class TestAsyncTask extends AsyncTask<Integer, Integer, String> { @Override
protected void onPreExecute() {
// 第一个运行方法
super.onPreExecute();
} @Override
protected String doInBackground(Integer... params) {
// 第二个运行方法,onPreExecute()运行完后运行
for (int i = 0; i <= 100; i++) {
progressBar.setProgress(i);
publishProgress(i);
try {
Thread.sleep(params[0]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "运行完成";
} @Override
protected void onProgressUpdate(Integer... progress) {
// 这个函数在doInBackground调用publishProgress时触发。尽管调用时仅仅有一个參数
// 可是这里取到的是一个数组,所以要用progesss[0]来取值
// 第n个參数就用progress[n]来取值
tv.setText(progress[0] + "%");
super.onProgressUpdate(progress);
} @Override
protected void onPostExecute(String result) {
// doInBackground返回时触发。换句话说。就是doInBackground运行完后触发
// 这里的result就是上面doInBackground运行后的返回值,所以这里是"运行完成"
setTitle(result);
super.onPostExecute(result);
} }
}
对于各參数及各方法的介绍使用。均已在凝视中解释,关于很多其它 安卓 方面的开法 可加Q群 104725817 讨论