Android学习知识

Android复习笔记4 异步消息

2019-01-17  本文已影响0人  北国雪WRG

学习凭借记忆复述学过的知识

运用:

  1. 解决子线程无法操作UI界面
  2. 闪图(开屏界面延时跳转)
  3. ...

组成对象:

对象 作用 参数,方法
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之类的
上一篇下一篇

猜你喜欢

热点阅读