为了活动小家电-Android主线程(二)

53 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

为了活动小家电,接着上篇搞!

为什么在 Android 主线程上的 UI 任务使用单线程模型?

简而言之,单线程模型应用于主线程,以防止 UI 操作中的竞争条件和死锁。 如果一个小部件使用多个线程,则可能会出现上述相同资源的死锁和竞争条件等问题。由于单线程模型不必担心资源访问的同步,也不需要上下文切换的成本,因此可以防止竞争条件和死锁。 此外,如果您在一个活动中有 N 个小部件,并且您使用 N 个多线程来处理每个小部件,则您无法保证每个小部件的绘制或更新顺序。

  • Android中的单线程模型是指 只有一个线程负责组成Android屏幕的视图或视图组的原则。单线程模型有两个规则:

    1. 首先,不要阻塞主线程(UI线程)。
    2. 其次,Android UI 工具包应该只能从主线程(UI 线程)访问。
  • 所以UI工作只能在单线程环境下进行,而负责UI工作的主线程在做UI工作时,应该按照单线程的原则进行操作。换句话说,UI 工作应该只在主线程上完成。主线程是唯一可以做 UI 工作的线程。 这就是为什么主线程也被称为 UI 线程的原因。回想一下,术语 UI 线程并不意味着主线程执行 UI 工作。

UI 线程和 Looper

在需要用户输入的程序中,必须执行一个循环来不断地接收用户输入并处理 UI 事件。如果在for或while语句中乱用无限循环,会产生不必要的等待时间,在此期间资源无法利用,导致系统浪费。

因此,UI 框架指导您使用 Message Queue 编写循环代码。这是 Looper 与消息队列一起工作的地方。通过以这种方式利用 Message Queue,还可以防止特定 UI 资源的竞争条件。 Looper 的这个概念据说在 GUI 诞生的时候就已经出现了。