zoukankan      html  css  js  c++  java
  • Android线程消息通信(一)

      Android在Java标准线程模型的基础上,提供了消息驱动机制,用于多线程之间的通信。基于消息驱动机制的线程通信模型陈伟线程消息通信。在标准线程模型中,线程执行完毕后便退出,而Android扩展了线程的退出机制,在启动线程时,可以首先在线程内部创建一个消息队列,然后让线程进入一个无限循环中,在这个无线循环中,线程会不断检查消息队列中是否有消息。如果需要线程执行某个任务,便向线程的消息队列中发送对应该任务的消息,线程在无线循环中检查到消息队列中有消息到来,便会获取该消息,进而执行该消息对应的处理流程。如果线程的消息队列中没有消息,线程便进入等待状态,等待消息的到来。这样便通过消息控制线程的执行,因此也称为消息驱动机制。

      消息驱动机制中主要涉及4个概念:消息、消息队列、消息循环、消息处理器,分别对应Message、MessageQueue、Looper、Handler这四个类。

    什么是Looper线程

      Android基于Java标准线程模型开发了Looper线程,用于实现消息驱动机制。Looper线程与标准线程的区别在于:Looper线程的run方法执行后并不会立即退出,而是进入一个Loop消息循环中等待消息的到来,然后根据消息类型分别作出不同的处理。这样,后台只需运行单一线程,当需要定时或者不定时执行不同任务时,分别发送不同的消息给Looper线程去处理,这样就避免了频繁创建/销毁线程所带来的开销。

    将一个普通线程变成Looper线程只需要以下代码:

    class LooperThread extends Thread{
        public Handler mHandler;
        public void run(){
            Looper.prepare();
            mHandler = new Handler(){
                public void handleMessage(Message msg){
                    //在这里处理消息
                }
            };
            Looper.loop();//Looper线程循环阶段
            }
    }

    在run()方法中,执行了一下三步操作:

      1)调用Looper.prepare方法进入Looper线程准备阶段;

      2)创建Handler对象用于实现消息处理器,消息处理器负责发送和处理消息;

      3)调用Looper.loop方法进入Looper线程循环阶段。

    通过以上三步,Looper线程提供了消息驱动机制的消息队列、消息循环和消息处理器,此后便可以接收消息了。

    下一篇文章将详细介绍创建线程消息队列和线程消息循环的过程。

  • 相关阅读:
    window、BOM、 document、 DOM
    React事件处理和原生JS事件处理
    React项目性能优化
    React条件渲染
    Aqua Data Studio中文乱码
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    Myeclipse 全局搜索的时候报错problems encountered during text search
    PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
    工作总结
    前进中不能迷失方向--Java程序员职业发展路线
  • 原文地址:https://www.cnblogs.com/sage-blog/p/4071000.html
Copyright © 2011-2022 走看看