首页 > 代码库 > AsyncTask中各个函数详细的调用过程,初步实现异步任务
AsyncTask中各个函数详细的调用过程,初步实现异步任务
异步任务是我们经常要使用的东西,android中提供了一套解决方案,从异步任务的开始到结束,相当完善。本实例没有任何应用价值,只是说明了AsyncTask中各个函数的调用顺序。
具体的结果看下面的Log输出即可:
异步任务类:
AsyncTaskTest.java
package com.kale.asynctask;import java.net.URL;import android.R.integer;import android.os.AsyncTask;/** * @author:Jack Tony * @tips : * 必须在UI线程中创建AsyncTask实例 * 必须在UI线程中执行AsyncTask的execute方法 * 每个AsyncTask只能执行一次,不能多次调用。要用的话再生成一个对象再执行即可 * @date :2014-8-1 *//** * @param * execute传来的参数是第三个参数 * 第一个参数的类型提供给publishProgress做参数(可变长的数组) * 第二个参数定义的是onProgressUpdate的参数类型(可变长的数组) * 第三个参数作为doInBackground返回值的类型,返回给onPostExecute做形参 */public class AsyncTaskTest extends AsyncTask<URL, Integer, String>{ /* (非 Javadoc) * @see android.os.AsyncTask#onPreExecute() * 开始异步任务前会调用此方法,这个方法执行在UI线程中 */ @Override protected void onPreExecute() { System.out.println("onPreExecute 开始执行"); System.out.println("onPreExecute 执行初始化操作,执行UI操作"); System.out.println("onPreExecute 所在的线程:"+Thread.currentThread().getName()); System.out.println("onPreExecute 执行完毕,开始执行doInBackground"); } /* * @see android.os.AsyncTask#doInBackground(Params[]),里面就是个可变长度的数组 * 里面写后台线程要完成任务,里面可以调用publishProgress(values);更新进度 * 可以有变长的参数,对个数无要求 */ @Override protected String doInBackground(URL... params) { System.out.println("doInBackground 开始执行"); System.out.println("doInBackground 执行耗时的异步任务"); System.out.println("doInBackground 所在的线程:"+Thread.currentThread().getName()); System.out.println("doInBackground 执行耗时的异步任务"); System.out.println("doInBackground 中调用publishProgress更新下视图"); for (int i = 0; i < 3; i++) { publishProgress(i);//这里传的值是给onProgressUpdate做参数的,这里传的也是一个可变长的数组 try { Thread.sleep(100); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } System.out.println("doInBackground 执行完毕,准备执行onPostExecute"); return "doInBackground执行完后的结果"; } /* (非 Javadoc) * @see android.os.AsyncTask#onProgressUpdate(Progress[]) * 在doInBackground中调用publishProgress时会执行这个方法,主要用来更新进度 * 执行在UI线程中 */ @Override protected void onProgressUpdate(Integer... values) { System.out.println("onProgressUpdate 开始执行,更新UI视图,一般是进度"); System.out.println("onProgressUpdate 执行第【"+(values[0].intValue()+1)+"】次更新操作"); System.out.println("onProgressUpdate 所在的线程:"+Thread.currentThread().getName()); System.out.println("onProgressUpdate 执行完毕,更新操作结束"); } /* (非 Javadoc) * @see android.os.AsyncTask#onPostExecute(java.lang.Object) * 在doInBackground执行完后,系统将doInBackground方法返回的参数作为形参传递到这个方法中 * 它执行在UI线程中 */ @Override protected void onPostExecute(String result) { System.out.println("onPostExecute 开始执行,更新UI视图"); System.out.println("onPostExecute 接收到的处理结果是:【"+result+"】"); System.out.println("onPostExecute 执行收尾操作"); System.out.println("onPostExecute 所在的线程:"+Thread.currentThread().getName()); System.out.println("onPostExecute 执行完毕,异步任务完全结束"); }}
MainActivity.java
package com.kale.asynctask;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AsyncTaskTest async = new AsyncTaskTest(); URL url = null; try { url = new URL("http://www.baidu.com"); } catch (MalformedURLException e) { e.printStackTrace(); } async.execute(url,url);//这里传进去的数据是给doInBackground做参数用的,可以传任意个参数 }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。