zoukankan      html  css  js  c++  java
  • 《第一行代码》学习笔记35-服务Service(2)

    1.Android的UI线程不安全,想要更新应用程序里的UI元素,则须在主线程中进行,否则会出现异常。

    2.Android不允许在子线程里进行UI操作,对于该情况,Android提供了一套异步消息处理机制,完美解决在子线程中进行UI操作。

    3.解析异步消息处理机制:
    Android中的异步消息处理有四部分,Message, Handler, MessageQueue和Looper。
    (1)Message:线程之间传递的消息,在内部携带少量的信息,用在不同线程间交换数据。
    (2)Handler:处理者,用于发送和处理消息。发送消息使用Handler的sendMessage()方法,发出的消息经过一系列辗转处理,
    会传递到Handler的handleMessage()方法中。
    (3)MessageQueue:消息队列,用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。
    每个线程中只有一个MessageQueue对象。
    (4)Looper:每个线程中的MessageQueue的管家,调用Looper的loop()方法后,会进入到无限循环中,然后每当发现MessageQueue
    中存在一条消息,会将它取出,传递到Handler的handleMessage()方法中。每个线程也只会有一个Looper对象。

    4.异步消息处理的整个流程:Firstly,在主线程中创建一个Handler对象,并重写handleMessage() 方法;Secondly,当子线程中需
    要进行UI操作时,就创建个Message对象,并通过Handler将这条消息发送出去;Thirdly,消息被添加到MessageQueue队列中等待被
    处理,而Looper则会一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的handleMessage() 方法中。
    Handler在主线程中创建,此时handleMessage()方法中的代码也会在主线程中运行,于是安心进行UI操作。

    5.整个异步消息处理机制的流程示意图如下:

    一条Message经过这样一个流程的辗转调用后,也就从子线程进入到主线程,从不能更新UI变成可以更新UI。

  • 相关阅读:
    GDI+ 读取jpg图片每个像素的值
    OpenCV 闭合轮廓检测
    OpenCV 求外接矩形以及旋转角度
    新编黑客攻防从入门到精通
    精通HTML5 + CSS3+JavaScript网页设计
    SolidWorks 2016中文版完全自学手册
    零基础轻松学MySQL 5.7
    R数据科学
    软件工程(工业和信息化普通高等教育“十二五”规划教材)
    World/Excel/PowerPoint 2013商务办公三合一
  • 原文地址:https://www.cnblogs.com/Iamasoldier6/p/5047354.html
Copyright © 2011-2022 走看看