Android开发 - Message 类多线程传递数据、通知与封装解析

什么是 Message

  • Message 是一个用于在不同线程之间传递数据和通知的对象。简单来说,它就是一个封装了数据的“信封”,可以在后台线程和主线程(UI线程)之间传递信息

Message 的基本属性

  • what:一个整型值,用于标识消息的类型。可以把它看作是消息的“标签”

  • arg1arg2:这两个整型字段可以用来传递额外的数据

  • obj:这是一个 Object 类型的字段,可以用来传递任意的对象

  • replyTo:用于设置一个 Messenger 对象,这样接收方可以通过它回复消息

Message 的应用场景

线程间通信

  • Android中,主线程(UI线程)不能做耗时的操作,因此需要使用子线程来处理这些操作。而 HandlerMessage 的组合使得子线程可以向主线程发送处理结果
  • 例子:假设你在子线程中下载了一张图片,下载完成后你需要更新UI,这时候就可以用 Message图片数据发送到主线程主线程收到 Message更新UI

处理异步操作

  • Android中,很多操作(比如网络请求、数据库操作等)都是异步的。这时,Message 可以用来通知操作完成并传递结果

  • 例子你发起了一个网络请求,操作完成后会发送一个 Message ,包含请求结果主线程接收到 Message 后可以更新UI

Handler 和 Message 的配合

  • HandlerHandler 是用来处理 Message 的工具,它通常与 Looper 一起使用Looper 是一个消息循环的机制Handler 会把 Message 放入消息队列中,然后 Looper队列中取出并处理这些 Message

    // 主线程中的Handler
    // Handler在主线程中创建
    Handler handler = new Handler(Looper.getMainLooper()) {
        // Handler 的 handleMessage 方法会接收到并处理消息
        @Override
        public void handleMessage(Message msg) {
            // 处理消息
            switch (msg.what) {
                case 1:
                    // 处理类型1的消息
                    break;
                case 2:
                    // 处理类型2的消息
                    break;
            }
        }
    };
    
    // 子线程中发送消息
    // Thread用于发送消息
    new Thread(() -> {
        Message message = handler.obtainMessage();
        message.arg1 = 6; // 储存额外的整数数据
        message.what = 1; // 储存标识消息的类型
        message.obj = "Some data"; //储存额外的字符串数据,可以是任何类型的数据
        handler.sendMessage(message);
    }).start();
    

总结

  • MessageAndroid 中用于线程间通信和异步操作处理的一个重要工具。它使得不同线程之间可以安全地传递数据和通知,从而避免了直接在UI线程进行耗时操作的问题。理解 Message 的使用对于编写高效和响应迅速的Android应用是非常重要的
posted @ 2024-08-23 11:33  阿俊学JAVA  阅读(61)  评论(0编辑  收藏  举报