【AsyncTask整理 2】 AsyncTask方法代码演示

本文介绍如何使用Android中的AsyncTask进行后台图片加载,并展示了一个具体的例子,包括如何在UI线程预处理、执行后台任务、更新进度及处理结果。
Android SDK为我们提供了一个后台任务的处理工具AsyncTask。AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护, Android开发网提示这样的好处可以解决一些线程安全问题,AsyncTask直接继承于Object类,位置为 android.os.AsyncTask。

                 三个泛型:

                 Param ,任务执行器需要的数据类型
                 Progress 后台计算中使用的进度单位数据类型
                 Result 后台计算返回结果的数据类型


Java代码:

 1         public class main extends Activity {
 2           ImageView imageView01;
 3           TextView textView;
 4           @Override
 5           public void onCreate(Bundle savedInstanceState) {
 6             super.onCreate(savedInstanceState);
 7             setContentView(R.layout.main);
 8             textView = (TextView) this.findViewById(R.id.TextView01);
 9             imageView01 = (ImageView) this.findViewById(R.id.ImageView01);
10             GetImage getImage = new GetImage();
11             getImage.execute("http://hi.youkuaiyun.com/attachment/201010/27/0_1288149117Yk8W.gif");
12           }
13           private class GetImage extends AsyncTask {
14             public GetImage() {
15             super();
16             // TODO Auto-generated constructor stub
17             }
18           @Override
19           protected void onCancelled() {
20             Log.i("czb", "onCancelled is running...");
21             super.onCancelled();
22           }
23           @Override
24           protected void onPostExecute(Object result) {
25             /*
26              * 此方法在主线程执行,任务执行的结果作为此方法的参数返回
27             */
28             Log.i("czb", "onPostExecute is running...");
29             Log.i("czb", "result == null ? " + (result == null));
30             imageView01.setImageBitmap((Bitmap)result);
31             super.onPostExecute(result);
32           }
33           @Override
34           protected void onPreExecute() {
35             /*
36             * 执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件
37             */
38             Log.i("czb", "onPreExecute is running...");
39             super.onPreExecute();
40           }
41           @Override
42           protected void onProgressUpdate(Object... values) {
43             /*
44             * 此方法在主线程执行,用于显示任务执行的进度。
45             */
46             Log.i("czb", "onProgressUpdate is running...");
47             // 由publishProgress传递的值
48             Log.i("czb", "values " + values[0]);
49             super.onProgressUpdate(values);
50           }
51           @Override
52           protected Object doInBackground(Object... params) {
53             /*
54             * 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。
55             * 在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
56             */
57             Log.i("czb", "doInBackground is running...");
58             try {
59               Bitmap bitmap;
60               HttpClient client = new DefaultHttpClient();
61               // params[0]代表连接的url
62               URI uri = URI.create((String) params[0]);
63               HttpGet get = new HttpGet(uri);
64               HttpResponse response = client.execute(get);
65               HttpEntity entity = response.getEntity();
66               long length = entity.getContentLength();
67               Log.i("czb", " " + length);
68               InputStream in = entity.getContent();
69               if (in != null) {
70               ByteArrayOutputStream baos = new ByteArrayOutputStream();
71               /*byte[] buf = new byte[128];
72               int ch = -1;
73               int count = 0;
74               while ((ch = in.read(buf)) != -1) {
75               baos.write(buf, 0, ch);
76               count += ch;
77               if (length > 0) {
78               // 如果知道响应的长度,调用publishProgress()更新进度
79               // onProgressUpdate读取进度
80               publishProgress((int) ((count / (float) length) * 100));
81                }
82               // 为了在模拟器中清楚地看到进度,让线程休眠100ms
83               //Thread.sleep(100);
84             }*/
85            bitmap = BitmapFactory.decodeStream(in);
86            in.close();
87            baos.close();
88            return bitmap;
89           }
90          } catch (Exception e) {
91             e.printStackTrace();
92           }
93          return null;
94         }
95       }
96     }

 

C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值