0. Toast 简介

Toast 用于向用户暂时显示一小段文字说明的视图。

Toast 的显示时长分“长”和“短”两种,长显示时长为 3.5 秒,短显示时长为 2 秒。

1. Toast 显示流程

一个 Toast 显示的流程主要由 3 个部分组成:

  1. 应用创建 Toast 实例,并向通知管理模块申请 Token。
  2. 通知管理模块会根据一定规则排队。排队到达后通知应用显示并发送 Token。
  3. 应用拿到 Token 后向窗口管理模块申请显示 Toast。

2. Toast 排队规则

NotificationManager 中有个队列存放 ToastRecord。一般情况下 ToastRecord 与应用创建的 Toast 实例一一对应。

2.1 入队规则

队列的入队规则,在 Android 8.1(M 平台)和 Android 10(X 平台)不太一致。

Android 8.1 的入队规则如下:

  1. 如果是系统应用,直接入队尾。
  2. 如果是非系统应用,从队列中查找该应用包名下的 ToastRecord。
    1. 如果存在,则替换掉,不改变队列中的顺序。
    2. 否则,入队尾。

Android 10 的入队规则如下:

  1. 如果是系统应用,直接入队尾。