在另一个 toast 替换它之前,如何确保 toast 在屏幕上显示特定时间?

How do I make sure a toast is on screen for a specific time before another toast replaces it?

我刚开始学习Android。我使用我的 MIUI 10 设备进行调试。

我已经学习了非常基础的 App Lifecycle Program。问题是,我正在使用 toasts 来显示何时调用每个方法。例如:当我按下后退按钮时,onPause、onStop 和 onDestroy 是将显示的 3 个单独的祝酒词。

我遇到的问题是,如果调用另一个toast,MIUI会自动取消当前的toast。所以我最终只显示了 onDestroy toast。

有没有办法确保我在下一个出现之前在屏幕上显示一段设定的时间?这不一定只适用于这种情况。我需要一个对未来也有帮助的通用解决方案。

如果 MIUI 的 Android 版本更改了按顺序显示 Toasts 的默认行为,您可以随时 post 自行延迟。长toast的标准延时是3500ms,短toast是2000ms。考虑到这一点,您可以尝试以下方式(未经测试):

final Handler uiHandler = new Handler(Looper.getMainLooper());

void scheduleToasts(String... messages) {
    final List<String> list = Arrays.asList(messages);
    Collections.reverse(list);

    final AtomicInteger countdown = new AtomicInteger(list.size());
    final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();

    service.scheduleWithFixedDelay(() -> {
        final int count = countdown.getAndDecrement();
        if(count == 0) {
            service.shutdown();
            return;
        }

        uiHandler.post(() -> Toast.makeText(getContext(), list.get(count), Toast.LENGTH_LONG).show());
    }, 0, 3500, TimeUnit.MILLISECONDS);
}

使用情况:

scheduleToasts("message1", "message2", "message3");