android开发 AsyncTask的使用



AsyncTask 资料上写是android提供的轻量级的异步类

可以直接继承AsyncTask 在类中实现异步操作 提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新)

最后反馈执行的结果给UI主线程


个人觉得 这是在一个线程的基础上 增加了对UI的控制 这样就不是一个简单的线程派生类

这就丰富了对UI的控制

而UI的控制一般都是在主线程上 ID是1 至于AsyncTask 内到底哪些接口是在主线程上

哪些是异步的线程上 而那些接口的调用顺序是怎么样的 下面就来看看一个例子


首先写一个AsyncTask派生类

吧哪些执行操作的接口都重写一下 并打印输出

public class PlayAsyncTask extends AsyncTask<Void, Void, Void> {

	@Override
	protected Void doInBackground(Void... arg0) {
		System.out.println("doInBackground Thread ID "+Thread.currentThread().getId()); 
		
		//该函数会产生一个onProgressUpdate回调
		publishProgress();
		return null;
	}

	@Override
	protected void onPostExecute(Void result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);
		
		System.out.println("onPostExecute Thread ID "+Thread.currentThread().getId()); 
	}

	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();
		
		System.out.println("onPreExecute Thread ID "+Thread.currentThread().getId()); 
	}

	@Override
	protected void onProgressUpdate(Void... values) {
		// TODO Auto-generated method stub
		super.onProgressUpdate(values);
		
		System.out.println("onProgressUpdate Thread ID "+Thread.currentThread().getId()); 
	}
	
}

在Activity上生成一个对象 这样就在主线程上执行了一个异步操作


System.out.println(" AsyncTask start");
         PlayAsyncTask playAsyncTask = new PlayAsyncTask();
         playAsyncTask.execute();

看看输出的结果


可以看到的是 只有doInBackground会在异步线程上执行 其余的都是在主线程上

也就是说 除doInBackground外 其他的回调函数都能对UI执行操作



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值