1.理论概述
说明
-
在Android中,只有在UIThread中才能直接更新界面
-
在Android中,长时间的工作(联网)都需要在workerThread中执行
-
在分线程获得服务器数据后, 需要立即到主线程去更新界面显示数据
-
消息机制
异步任务
测试用例
2.消息机制
2.1 相关API
-
Message :消息
-
可理解为线程间通讯的数据单元, 可通过message携带需要的数据
-
创建对象: Message.obtain(what)
-
封装数据 public int what //id 标识 public int arg1 public int arg2 public Object obj
-
-
Handler : 处理器
-
Handler是Message的处理器,同时也负责消息的发送和移除的工作
-
发送即时消息: sendMessage(Message msg)
-
发送延时消息: sendMessageDelayed(Message msg, long time)
-
处理消息: handleMessage(Message msg) (回调方法)
-
移除还未处理的消息: removeMessages(int what)
-
-
MessageQueue : 消息队列
-
用来存放通过Handler发送的消息
-
它是一个按Message的when排序的优先级队列
-
-
Looper(钩子) : 循环器
-
负责循环取出Message Queue里面的当前需要处理的Message
-
交给对应的Handler进行处理
-
处理完后, 将Message缓存到消息池中, 以备复用
-
2.2 测试用例
功能描述
-
点击GET请求获取: 显示提示正在加载的进度条, 分线程请求网络
-
使用Handler的一般步骤
-
创建Handler成员变量对象, 并重写其handleMessage()
-
在分/主线程创建Message对象
-
使用handler对象发送Message
2.3 应用小DEMO
功能描述
1. 初始时
显示10,可以通过点击按钮改变其值
2. 点击“自动增加”
每隔1S上面的文本数值增加1,但最大显示20并作出提示
3. 点击“自动减少”
每隔1S上面的文本数值减少1,但最小显示1并作出提示
4. 点击“暂停”
上面的数值文本不再变化
2.4 消息机制原理
原理图一
原理图二
3.异步任务
理解
-
-
逻辑上: 以多线程的方式完成的功能需求
-
API上: 指AsyncTask类
-
-
AsyncTask的理解
-
在没有AsyncTask之前, 我们用Handler+Thread就可以实现异步任务的功能需求
-
AsyncTask是对Handler和Thread的封装, 使用它更编码更简洁,更高效
-
AsyncTask封装了ThreadPool, 比直接使用Thread效率要高
3.1 相关API
-
-
AsyncTask<Params, Progress, Result>
-
Params 启动任务执行的输入参数,比如HTTP请求的URL。
-
Progress 后台任务执行的百分比。
-
Result 后台执行任务最终返回的结果,比如String。
-
-
execute(Params... params) :启动任务, 开始任务的执行流程
-
void onPreExecute():在分线程工作开始之前在UIThread中执行,一般用来显示提示视图
-
Result doInBackground(Params... params): 在workerThread中执行, 完成任务的主要工作,通常需要较长的时间
-
void onPostExecute(Result result): 在doInBackground()执行完后在UIThread中执行,一般用来更新界面
-
publishProgress(Progress... values) : 在分线程中, 发布当前进度
-
void onProgressUpdate(Progress... values) : 在主线程中更新进度
3.2 测试用例
3.3 异步任务过程
过程分析图
4.应用练习
动态显示带图片列表