欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

android开发 AsyncTask的使用

来源: 开发者 投稿于  被查看 21667 次 评论:269

android开发 AsyncTask的使用




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

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

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


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

这就丰富了对UI的控制

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

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


首先写一个AsyncTask派生类

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

public class PlayAsyncTask extends AsyncTask {

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



用户评论