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

我已经学习了非常基本的App Lifecycle Program。问题是,我正在用祝酒来演示何时调用每种方法。例如:当我按下后退按钮时,将显示onPause,onStop和onDestroy 3种敬酒。

我面临的问题是,如果调用另一个UI,MIUI将自动取消当前的Toast。所以最后我只展示了onDestroy吐司。

有没有一种方法可以确保在下一次到来之前在屏幕上显示烤面包片的时间?这不必只适用于这种情况。我需要一个通用的解决方案,对将来也有帮助。

最佳答案

如果MIUI的Android版本更改了按顺序显示Toast的默认行为,则始终可以自己延迟发布它们。长敬酒的标准延迟时间为3500ms,短敬酒的标准延迟时间为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");

08-04 09:53