使用ProgressBar 进度条对AsyncTask 进行测试,具体代码如下所示:
public class MainActivity extends Activity {
private ProgressBar mProgressBar;
private TextView mTextView;
private Button btn;
private boolean is=true;
private MyAsyncTask task=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mProgressBar = (ProgressBar) findViewById(R.id.activity_main_pro<span style="font-family: Arial, Helvetica, sans-serif;">gressbar);</span>
mTextView = (TextView) findViewById(R.id.activity_main_tv);
btn = (Button) findViewById(R.id.activity_main_btn);
mProgressBar.setVisibility(View.INVISIBLE);
mTextView.setVisibility(View.INVISIBLE);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (is) {
task= new MyAsyncTask();
task.execute();
btn.setText("取消");
is=false;
}else{
task.cancel(true);
btn.setText("下载");
is=true;
}
}
});
}
//Params:下载地址的数据类型,一般用String
//Progress:进度值数据类型
//Result:下载到的数据类型
//注意:如果不需要的数据可以为空(Void)
class MyAsyncTask extends AsyncTask<Void, Integer, String>{
//onPreExecute方法进行初始化,例如完成一些下载之前的准备工作
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressBar.setVisibility(View.VISIBLE);
mTextView.setVisibility(View.VISIBLE);
}
//在doInBackground:方法中完成耗时操作,如:下载、大型数据分析等
@Override
protected String doInBackground(Void... params) {
//为了模仿耗时操作
for (int i = 0; i < 100&&!isCancelled(); i++) {
try {
Thread.sleep(500);
publishProgress(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "下载完成";
}
//onProgressUpdate方法更新进度
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
System.out.println(values[0]);
mTextView.setText("已下载"+values[0]+"%");
}
//在onPostExecute方法是在doInBackground方法完成以后,将doInBackground方法返回的数据更新到UI线程中
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mTextView.setText(result);
}
}
}
Layout布局文件如下:
<LinearLayout 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:orientation="vertical"
android:layout_gravity="center_horizontal"
tools:context=".MainActivity" >
<ProgressBar
android:id="@+id/activity_main_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/activity_main_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/activity_main_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/download"
android:layout_marginTop="50dp"
/>
</LinearLayout>