• 异步消息处理机制


    异步消息处理机制主要由Message,Handler,MessageQueue和Looper这四部分组成

    1.Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据

    2.Handler是处理者的意思,它主要用于发送和处理消息,发送消息通过Handler的sendMessage()方法,发出的消息最终会被传递到Handler的handleMessage()方法中

    3.MessageQueue是消息队列,用来存放Handler发送的消息,这些消息一直存放在消息队列中等待被处理,每个线程只有一个MessageQueue对象

    4.Looper是专门来从MessageQueue中取出消息的,调用Looper的loop()方法后,就会不断的从消息队列中取出消息传递到Handler的handleMessage()方法中,而每个线程中也只有一个Looper对象

    示例代码如下:

    //用来标记Handler消息的常量
    public static final int UPDATE_TEXT = 1;
    //首先需要在主线程创建一个Handler的子类对象,
    //子类还需要重写Handler的handleMessage()方法
    private Handler handler = new Handler(){
        public void handleMessage(Message msg){
            switch(msg.what){
                case UPDATE_TEXT:
                    // 在这里可以进行UI操作
                    text.setText("Hello World");
                    break;
                default:
                    break;
            }
        }
    }
    //然后需要在子线程中创建一个Message对象
    ...
    new Thread(new Runnable() {
        @Override
        public void run() {
            Message message = handler.obtainMessage();  
            message.what = UPDATE_TEXT;
            handler.sendMessage(message); // 将Message对象发送出去
        }
    }).start();
    注意:上面为什么用的是handler.obtainMessage()而不是new Message(),
    这里面差别其实并不大,只是前者是从消息池中拿来一个msg,不需要重新new,节省了一点内存空间

    这样一个简单的异步消息处理机制就完成了,
    为了更加使我们更方便的在子线程中对 UI 进行更新, Android还提供了AsyncTask。借助 AsyncTask,即使对异步消息处理机制完全不了解,

    也可以容易地从子线程切换到主线程。当然,AsyncTask的实现原理也是基于异步消息处理机制的,

    只不过Android工程师们帮我们做了很好的封装而已,想了解使用Asynctask的相关知识请看这篇文章

    http://www.cnblogs.com/cxsy/p/5608334.html

  • 相关阅读:
    Odd sum CodeForces
    Chips CodeForces
    Secrets CodeForces
    Voting CodeForces
    Jury Meeting CodeForces
    Planning CodeForces
    Maxim Buys an Apartment CodeForces
    Chemistry in Berland CodeForces
    Monitor CodeForces
    Four Segments CodeForces
  • 原文地址:https://www.cnblogs.com/cxsy/p/5627840.html
Copyright © 2020-2023  润新知