学习安卓断断续续已经接近两个月了,之前为了省时间把学习过程中遇到的问题在网上查过之前没有记录只是收藏了一下网页,现在手上事情不多,来整理记录一下,以便记忆。

Android单线程模型是这样描述的:
Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行
如果在其他线程访问UI线程,Android提供了以下的方式:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)

为什么UI更新一定要在UI线程中进行呢?
       目的在于提高移动端更新UI的效率和和安全性,以此带来流畅的体验,原因是:
Android的UI访问是没有加锁的,多个线程可以同时访问更新操作同一个UI控件。也就是说访问UI的时候,android系统当中的控件都不是线程安全的,这将导致在多线程模式下,当多个线程共同访问更新操作同一个UI控件时容易发生不可控的错误,而这是致命的。
        UI控件的访问加上锁机制呢?缺点有两个:首先,加上锁机制会让UI访问的逻辑变得复杂;其次锁机制会降低UI访问的效率,因为锁机制会阻塞某些线程的执行.所以Android中规定只能在UI线程中访问UI,这相当于从另一个角度给Android的UI访问加上锁,一个伪锁。

       当一个程序第一次启动的时候,Android会同时启动一个对应的主线程,这个主线程就是UI线程,也就是ActivityThread。UI线程主要负责处理与UI相关的事件,如用户的按键点击、用户触摸屏幕以及屏幕绘图等。系统不会为每个组件单独创建一个线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出去。所以,响应系统回调的方法永远都是在UI线程里运行,如响应用户动作的onKeyDown()的回调。

单线程化的事件队列模型定义:
采用一个专门的线程从队列中抽取事件,并把他们转发给应用程序定义的事件处理器。

非UI线程能更新UI,只要它有自己的ViewRoot。

参考博文:https://blog.csdn.net/haoyuegongzi/article/details/79414081
                  https://www.cnblogs.com/lao-liang/p/5108745.html

更多相关文章

  1. Android UI 控件 和 对应监听器详细总结
  2. android中的binder通信机制
  3. 1 Android 安全机制概述
  4. HelloWorldAndroid几个控件
  5. android自定义控件:可旋转View:可作为ImageView、ImageButton
  6. android handler 多线程demo

随机推荐

  1. android如何打印当前的线程及进程
  2. Android中Menu的几个类型学习
  3. magicIndicator使用简记
  4. android GB版本的camera,录像过程中按“菜
  5. android APK知识
  6. Visual Studio 2015 和 Apache Cordova
  7. Android(安卓)对话框【Dialog】去除白色
  8. Android(安卓)开发环境配置图文教程(jdk+
  9. android 不同进程间的调用 AIDL 实现通讯
  10. Android SDK 中常用命令行工具