2015.01.15(android AsyncTask)

参考网址: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     }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。