一、什么是UI线程

  • 当程序第一次启动的时候,Android会同时启动一条主线程( Main Thread)。

  • 主要负责处理与UI相关的事件。

二、UI线程存在的问题

  • 出于性能优化考虑,Android的UI操作并不是线程安全的,意味着如果多个线程并发操作UI线程,可能导致线程安全问题。

  • 为了解决这个问题,Android规定:只允许UI线程修改Activity里的UI组建。

三、消息传送机制作用

  • 为了解决Android应用多线程问题—Android平台只允许UI线程修改Activity里的UI组建,就会导致新启动的线程无法改变界面组建的属性值。

四、Handler的作用(子线程往主线程发送消息的情况)

  • 在新启动的线程中发送消息。

    • 使用Handler对象的sendMessage()方法或者SendEmptyMessage()方法发送消息。

  • 在主线程中获取处理消息。

    • 重写Handler类中处理消息的方法(void handleMessage(Message msg)),当新启动的线程发送消息时,消息发送到与之关联的MessageQueue。而Hanlder不断地从MessageQueue中获取并处理消息。

五、Hanlder类

Handler类包含如下方法用于发送、处理消息:

  • void handleMessage(Message msg):处理消息的方法,该方法通常用于被重写。

  • final boolean hasMessage(int what):检查消息队列是否包含what属性指定值的消息。

  • final boolean hasMessage(int what,Object object):检查消息队列中是否包含what属性为指定且object属性为指定指定对象的消息。

  • Message obtainMessage():获取消息。

  • sendEmptyMessage(int what):发送空消息。

  • final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之后发送空消息。

  • final boolean sendMessage(Message msg):立即发送消息。

  • final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之后发送消息。

六、Handler、Loop、MessageQueue、Message原理

  • Handler:

    • 发送消息,它能把消息发送给Looper管理的MessageQueue。

    • 处理消息,并负责处理Looper分给它的消息。

  • Message:Handler接收和处理的消息对象。

  • Looper:

    • 每个线程只有一个Looper,它负责管理MessageQueue,会不断地从MessageQueue取出消息,并将消息分给对应的Hanlder处理。

      • 主线程中,系统已经初始化了一个Looper对象,因此可以直接创建Handler即可,就可以通过Handler来发送消息、处理消息。

      • 程序自己启动的子线程,程序必须自己创建一个Looper对象,并启动它,调用Looper.prepare()方法。

    • prapare()方法:保证每个线程最多只有一个Looper对象。

    • looper()方法:启动Looper,使用一个死循环不断取出MessageQueue中的消息,并将取出的消息分给对应的Handler进行处理。

  • MessageQueue:由Looper负责管理,它采用先进先出的方式来管理Message。

七、使用Handler步骤

  1. 调用Looper的prepare()方法为当前线程创建Looper对象,创建Looper对象时,它的构造器会创建与之配套的MessageQueue。

  2. 有了Looper之后,创建Handler子类实例,重写HanderMessage()方法,该方法负责处理来自于其他线程的消息。

  3. 调用Looper的looper()方法启动Looper。


更多相关文章

  1. Android之Handler非主线程更新UI
  2. Android消息机制
  3. Android应用程序键盘(Keyboard)消息处理机制分析
  4. Android电话系统之-rild
  5. android - 为响应度而设计 - 开发文档翻译
  6. Android面试系列文章2018之Android部分HandlerThread机制篇
  7. Android中几种图像特效处理的集锦!!
  8. Android异步任务AsyncTask
  9. Android中的多进程、多线程

随机推荐

  1. 【android】AudioManager音量控制
  2. Android 检测网络是否可用
  3. Android(安卓)Studio Fragment问题与解决
  4. android 显示 网络图片
  5. Android Ftp 简单上传下载
  6. Android 利用handler传递数据
  7. android 图片圆角处理
  8. Android 7.0调用系统相机返回路径问题
  9. Gradle 的配置
  10. TextWatcher监控EditText (转)