首页 > 解决方案 > 如何在同一函数的两次调用之间正确等待一段时间?

问题描述

所以我一直试图在每次我想使用“setText”写一条新消息之间暂停两秒钟。

public void startNewGame() throws InterruptedException {

            welcomeMessage("Welcome.");

            if (!seenTutorial) {
                seenTutorial = true;
                welcomeMessage("This is the first message.");
                welcomeMessage("This is the second message.");
                welcomeMessage("This is the third message.");
            }
        }


      public void welcomeMessage(String message) throws InterruptedException {

            welcomeText.setAlpha(0f);
            welcomeText.setText(message);
            welcomeText.animate().setDuration(2000).alpha(1.0f);
        }

我试过等待(2000),但程序崩溃了。

还尝试用以下内容包围welcomeMessage方法的内容:

    public void welcomeMessage(String message) throws InterruptedException {
     Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    public void run() {
                         welcomeText.setAlpha(0f);
                         welcomeText.setText(message);
                         welcomeText.animate().setDuration(2000).alpha(1.0f);
                    }
                }, 2000);   //2 seconds
}

这样,只有最后一条消息“这是第三条消息”。会出现。我究竟做错了什么?

标签: javaandroidwait

解决方案


在该welcomeMessage方法中,Handler每次发布一个r Runnable计划在创建的同一线程上延迟运行的 a 时,您都会创建新的Handler

所以发生的事情是这 3 个可运行文件都将在您的 2000 毫秒后运行,这就是为什么您只看到第三个可运行文件的效果。所以是的,你可以用不同的延迟来安排它们(所以它们之间存在时间间隔),即 2000、4000、6000。

 public void welcomeMessage(String message, int delay) throws InterruptedException {
     Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    public void run() {
                         welcomeText.setAlpha(0f);
                         welcomeText.setText(message);
                         welcomeText.animate().setDuration(2000).alpha(1.0f);
                    }
                }, delay);   
}

showMessage("hello", 2000);
showMessage("lets play the game", 4000);

推荐阅读