用过AsyncTask的都知道,一旦开始AsyncTask 就没办法cancel
今天想到一个方法可以跳过运行中的AsyncTask
使用一个整形参数去控制当前的AsyncTask ,如果当前的AsynTaskk count 不等于 ActivityCount 就不执行onPostExecute;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private int activityCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setText("test");
setContentView(button);
button .setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new TestAsyncTask().execute(++activityCount);
}
});
}
private class TestAsyncTask extends AsyncTask<Object, Object, Object> {
private int curCount;
@Override
protected Object doInBackground(Object... params) {
// TODO Auto-generated method stub
curCount = (Integer) params[0];
try {
Log.v("test", String.format("doInBackground-->curCount:%d----activityCount:%d", curCount,activityCount));
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(curCount != activityCount){
Log.v("test", String.format("onPostExecute-->curCount:%d-!=-activityCount:%d", curCount,activityCount));
}else{
Log.v("test", String.format("onPostExecute-->curCount:%d-==-activityCount:%d", curCount,activityCount));
}
}
}
}