当一个应用程序启动时,Android 会启动一个Linux进程和一个主线程。

Android中所有的组件都在指定的进程的主线程进行实例化,对于系统的响应方法也都是在这个主线程中响应的。所以在系统调用时间较长的操作时,不应放到主线程中进行处理,应该在本进程中新建一个线程进行处理。

单线程模型:

当一个应用程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主要负责处理与UI有关的事件,并把相关事件分发到对应的组件中进行处理。所以主线程通常被叫做为UI线程。

在Android开发时,必须遵循单线程模型:UI的操作不是线程安全的,所以对于UI的操作必须放到主线程中进行操作。

如果幕后的线程来执行UI对象,Android就会发出错误讯息 CalledFromWrongThreadException


Message Queue 和Handler的关系:


Message消息:(线程见通信的媒介)

Handler 处理者:(线程消息的处理者)

Handler用来负责消息Message的发送,以及在响应MessageQueue的消息处理。

使用Handler,需要implement该类的handleMessage(Message)方法,它是处理这些Message的操作内容

Message Queue消息队列:

用来处理Handler发送的Message信息,按照先进先出执行。


每一个线程都有自己的MessageQueue和自己管理线程的Looper

Handle的作用是将Message放入到特定线程的MessageQueue中进行处理

Handler会向MessageQueue以两种方式发送消息:sendMessage 和post

这两种消息都会插在MessageQueue的队尾并按照先进先出进行执行。

区别:

SendMessage发送的是一个message对象,会被handler的handleMessage的函数进行处理。

Post发送的是一个runnable对象,会自己执行。

更多相关文章

  1. 浅析Android中的消息机制-解决:Only the original thread that cr
  2. Android异步消息机制之Handler
  3. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  4. android 音效处理 (2)
  5. Android之Handler用法总结
  6. Android开发之消息处理机制(一)——Handler
  7. android 音效处理 (2)
  8. Android异步加载图像小结 (含线程池,缓存方法)
  9. android 面试题集

随机推荐

  1. Android内核开发的几个常用命令
  2. Android(安卓)滑动效果入门篇(一)ViewFlipp
  3. activity基本模式
  4. ListView/GridView 按住拖动黑线框/桌面
  5. Gson 自动过滤null 解决方案。
  6. android 购物车数量加减计算(几行代码实
  7. Android服务器推送之GCM
  8. 使用IDA调试android下的linux程序
  9. 使用 Virtual Box 安装 android x86
  10. 错误日志收集-Bugly集成