参考网址:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html
1 /* 2 * Params 启动任务执行的输入参数,比如HTTP请求的URL。 3 * Progress 后台任务执行的百分比。 4 * Result 后台执行任务最终返回的结果,比如String 5 * 6 * doInBackground(Params…) :后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。 7 * 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。 8 * 在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。 9 * onPostExecute(Result) :相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 10 * 此方法在主线程执行,任务执行的结果作为此方法的参数返回 11 * 12 * 有必要的话你还得重写以下这三个方法,但不是必须的: 13 * onProgressUpdate(Progress…) 可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。 14 * onPreExecute() 这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。 15 * onCancelled() 用户调用取消时,要做的操作 16 */ 17 public class MyAsyncTask extends AsyncTask<String, Integer, List<Product>> 18 { 19 @Override 20 protected void onPreExecute() 21 { 22 Toast.makeText(getApplicationContext(), "开始加载", Toast.LENGTH_SHORT).show(); 23 super.onPreExecute(); 24 } 25 26 // * 后台运行耗时操作,不能直接操作主UI线程里面的数据,通过函数publishProgress和onProgressUpdate间接操作主UI线程里面的数据 27 @Override 28 protected List<Product> doInBackground(String... params) 29 { 30 // 获取产品列表,不能操作主UI线程内的数据 31 List<Product> temProducts = new GetProductService().getProduct(page); 32 // for( Integer i = 0; i < 3; ++i ) 33 // { 34 // publishProgress(i); // 通过调用该函数通知 onProgressUpdate并且在onProgressUpdate中可以修改UI主线程中的参数 35 // } 36 return temProducts; 37 } 38 39 // * 子线程中调用publishProgress函数通知此函数操作主UI线程中的数据(主要是进度条数据) 40 @Override 41 protected void onProgressUpdate(Integer... values) 42 { 43 int vlaue = values[0]; // 获取主线程中调用 publisProgress 传递过来的进度值 44 Toast.makeText(getApplicationContext(), "加载进度:" + vlaue, Toast.LENGTH_LONG).show(); 45 super.onProgressUpdate(values); 46 } 47 48 // 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。此方法在主线程执行,任务执行的结果作为此方法的参数返回 49 // 这里的product参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值) 50 // 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置 51 @Override 52 protected void onPostExecute(List<Product> product) 53 { 54 Toast.makeText(getApplicationContext(), "加载完毕", Toast.LENGTH_LONG).show(); 55 ListUtil.products = products; // 获取产品列表对象 56 isLoading = false; // 设置加载标志状态位:加载完毕 57 58 adapter.setProducts(product); 59 adapter.notifyDataSetChanged(); 60 if( product.size() == 0 ) 61 { 62 Toast.makeText(getApplicationContext(), "已经加载完毕", Toast.LENGTH_LONG).show(); 63 productListView.removeFooterView(footView); 64 isLoading = true; 65 } 66 } 67 68 @Override 69 protected void onCancelled(List<Product> result) 70 { 71 super.onCancelled(result); 72 } 73 }
时间: 2024-10-25 00:35:44