zoukankan      html  css  js  c++  java
  • [Android] 线程间交互

    学习Android的线程交互,要掌握Thread, Looper, MessageQueue和Handler这四个概念。
    1. Thread代表线程,不是每个Thread都有Looper,但Looper必须附在一个线程上。
    2. Looper内部维护一个MessageQueue,即消息队列。
    3. 每个MessageQueue中有一个Handler,Handler对象用来发送消息到MessageQueue中,或接收Looper(从MessageQueue中)送来的消息。

    获取Looper对象的引用:

    Looper looper = Looper.myLooper();
    

    为了与Looper进行沟通,我们需要构建一个Handler的子类,这里我们将其命名为EventHandler。
    EventHandler负责MessageQueue的存取工作。
    籍由EventHandler,我们可以发送消息给Looper,然后放入其MessageQueue中。

    class EventHandler extends Handler {
        public EventHandler(Looper looper) {
            super(looper);
        }
        @override
        public void handleMessage(Message msg) {       // 处理收到的Message
            textView.setText((String) msg.obj);
        }
    }

    发送一个message:

    EventHandler handler = new EventHandler(looper);
    handler.removeMessages();     // 清除MessageQueue中的事件
    String str = "Hello, message.";
    Message msg = handler.obtainMessage(1, 1, 1, str);    // 组装一个事件
    handler.sendMessage(msg);     // 发送事件

    在别的线程里,若要向主线程发送Message,可用如下方法获取主线程的Looper对象引用:

    Looper mainLooper = Looper.getMainLooper();
    // 接下来获取Handler,发送Message的代码和之前一样


  • 相关阅读:
    asterisk配置SIP服务器
    虚拟机桥接网卡下配置centOS静态IP
    在centOS5.9安装asterisk
    Cut 命令截取不同空格的string
    shell 中 贪婪匹配 和 非贪婪匹配
    shell 一些例子
    linux 系统时间 EST CST
    awk简单应用
    python3.5-ssh免输入密码过程
    GitHub个人使用入门
  • 原文地址:https://www.cnblogs.com/every2003/p/2482977.html
Copyright © 2011-2022 走看看