关于关闭AsyncTask

本文介绍了一种通过控制变量来取消正在执行的AsyncTask的方法。在Android应用中,通过比较Activity和AsyncTask之间的计数器,如果两者不同则跳过onPostExecute方法的执行,从而达到取消效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用过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));
			}
		}

	}

	 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值