//AsyncTask的取消
public class ProgressBarTest extends Activity{
private ProgressBar mProgressBar;
private MyAsyncTask mTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progressbartest);
mProgressBar = (ProgressBar) findViewById(R.id.pb);
mTask = new MyAsyncTask();
mTask.execute();
}
//1、重写onPause 添加判断
@Override
protected void onPause() {
super.onPause();
if(mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING){
//cancel方法只是将对应的AsyncTask标记为cancel状态,并不是真正的取消
mTask.cancel(true);
}
}
class MyAsyncTask extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
//模拟进度更新
for (int i = 0; i < 100; i++) {
//2、判断是否取消 如果取消,则跳出循环
if(isCancelled()){
break;
}
publishProgress(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
/3、判断是否取消
//if(isCancelled()){//获取进度更新值mProgressBar.setProgress(values[0]);}}}}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/pb"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>
<span style="font-family:SimSun;font-size:18px;"><strong>AsyncTask的注意事项</strong></span>
<span style="font-family:SimSun;font-size:18px;"><strong>1、必须在UI线程中创建AsyncTask的实例</strong></span>
<span style="font-family:SimSun;font-size:18px;"><strong>2、必须在UI线程中调用AsyncTask的execute()</strong></span>
<span style="font-family:SimSun;font-size:18px;"><strong>3、重写的四个方法是系统自动调用的,不应手动调用
4、每个只能被执行一次,多次调用将会引起异常</span></strong></span>
<span style="font-family:SimSun;font-size:18px;"><strong>5、不能再doInBackground中跟新UI
</strong></span>