Android复习笔记4 异步消息
2019-01-17 本文已影响0人
北国雪WRG
学习凭借记忆复述学过的知识
运用:
- 解决子线程无法操作UI界面
- 闪图(开屏界面延时跳转)
- ...
组成对象:
对象 | 作用 | 参数,方法 |
---|---|---|
Message | 封装一条消息 | what,arg,obj |
MessageQueue | 每个线程有且仅有一个该对象 | |
Handler | 处理MQ中的消息 | handleMessage()sendMessage() |
Looper | 不断的访问MQ,如果有M就交给Handle | loop() |
使用
// 使用Activity内部的Looper对象
handler=new MyHandler(); // 此时不需要传入looper参数
Message msg=Message.obtain();
msg.what=1;
msg.obj="要发送的对象";
handler.sendMessage(msg);
------------------------------------------------
// 获取当前线程的Looper
Looper looper=Looper.myLooper();
handler=new MyHandler(looper);
Message msg=Message.obtain();
msg.what=2;
msg.obj="使用当前线程的Looper";
handler.sendMessage(msg);
----------------------------------------------
// 处理消息(内部类)
public class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
tvSendMes1.setText("what=" + msg.what + "," + msg.obj);// UI 操作
}
}
封装
AsyncTask抽象类帮助我们完成了大多数工作。我们只需要继承它,并实现抽象方法就可以了。
三个参数类型
参数1:传入值,比如URL
参数2:耗时操作的进度,onProgressUpdate(arg2)
中使用
参数3:返回值,onPostExecute(arg3)
传入的参数,可以更新UI
四个方法
onPreExecute() // 下载文件之前的初始化操作
doInbackground() // 用于耗时操作,如下载文件
onProgressDate() // 可以更新下载文件的进度
onPostExecute() //文件下载完成,更新一下UI之类的