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执行操作
时间: 2024-10-26 12:19:48