首页 > 代码库 > android开发 AsyncTask的使用

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执行操作



android开发 AsyncTask的使用