Android 消息机制和HandleThread

消息机制

在这里插入图片描述

  • 用途

    • 线程间的通信
  • Message

    • 具体消息实体
  • MessageQueue

    • 消息队列,用于存储和获取消息
  • Looper

    • 内部维护一个MessageQueue对象,通过一个无限循环的loop方法,持续从MessageQueue获取dispatchMessage并处理消息handleMessage

    • 消息循环起始于Looperloop方法调用,此方法内部是一个无限的for循环,线程一旦进入loop就再也出不去了,除非主动退出。以后线程所做的事有三件:取消息、执行消息处理函数和等待

    • 使用Looper.prepare()和Looper.loop()创建了消息队列就可以让消息处理在该线程中完成。

    • 创建了消息队列才能使得子线程和主线程通信,例如更新UI

    • 写在Looper.loop()之后的代码不会被立即执行,当调用后mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行。

    • Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。

    • 退出消息循环,手动在Activity的销毁方法中中调运thread.getLooper().quit(),避免内存泄露

    • 一些API使用

      • Looper.prepare()-为当前线程创建一个Looper

      • Looper.loop()-开启消息循环,只有调用该方法,消息循环系统才会开始循环;

      • Looper.prepareMainLooper()-为主线程也就是ActivityThread创建Looper使用;

      • Looper.getMainLooper()-通过该方法可以在任意地方获取到主线程的Looper;

      • Looper.quit() Looper.quitSafely()-退出Looper,自主创建的Looper建议在不使用的时候退出

  • Handler

    • Handler负责消息的发送和处理,通过它可以实现其他支线线程与主线程之间的消息通讯。

    • new 一个Handler需要实现handleMessage方法

      • mCameraHandler = new Handler(mCameraThread.getLooper()){
                    @Override
                    public void handleMessage(Message msg) {
        
                    }
                };
        
    • 常用API

      • sendMessage( )

      • post( Runnable )

HandlerThread
  • 简介

线程间通信的时候,比如Android中常见的更新UI,涉及到的是子线程和主线程之间的通信,实现方式就是Handler+Looper,但是要自己手动操作Looper,所以谷歌封装了HandlerThread类

  • 特点

    • 继承Thread

    • 内部维护了一个Looper实例

    • 通过获取HandlerThread的looper对象创建Handler对象

    • 创建HandlerThread后必须先调用HandlerThread.start()方法

    • 线程使用完毕后,需要调用quitSafely(),退出消息循环,避免内存泄露

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

檀良月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值