0. Toast 简介

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

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

1. Toast 显示流程

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

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

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/94ac1561-e97c-44e1-94c4-88a0c73ea1cb/Flowchart.jpg

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. 如果是系统应用,直接入队尾。