Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA.wait()用于在运行android studio方法之前等待_Java_Android_Wait_Thread Sleep - Fatal编程技术网

JAVA.wait()用于在运行android studio方法之前等待

JAVA.wait()用于在运行android studio方法之前等待,java,android,wait,thread-sleep,Java,Android,Wait,Thread Sleep,所以,我在安卓工作室工作,试图在两种方法之间设置一个暂停。在第一个窗口中,加载gif,在第二个窗口中显示弹出消息。我曾尝试使用Thread.sleep和下面的TimeUnit,但它们都是在运行其他所有操作之前等待时间的方式执行的。换句话说,下面的代码等待4秒钟,然后同时运行gameGif()和gameFinish()。以下是我的代码: gameGif(); { try { TimeUn

所以,我在安卓工作室工作,试图在两种方法之间设置一个暂停。在第一个窗口中,加载gif,在第二个窗口中显示弹出消息。我曾尝试使用Thread.sleep和下面的TimeUnit,但它们都是在运行其他所有操作之前等待时间的方式执行的。换句话说,下面的代码等待4秒钟,然后同时运行gameGif()和gameFinish()。以下是我的代码:

        gameGif();
        {
            try
            {
                TimeUnit.SECONDS.sleep(4);
            }
            catch(InterruptedException ex)
            {}
        }

        gameFinish();
这对我有用

gameGif();

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        gameFinish();
    }
}, 4000);

您正在做的是设置更新UI的意图。实际的UI更新是由Android Looper在代码中单独执行的。实际上,通过调用
wait()
,您实际上阻止了渲染线程进行更新

正如Matus所说,使用
处理程序是正确的方法。
处理程序
将使用
活套
组织调度,并且仍然允许活套运行(即非阻塞)。超时时间过后,它将调用
Runnable


使用这种方法需要注意的一件事是在UI循环上调用处理程序(即,从一个“正常”的Android方法)。如果您从自己的
线程调用它,它将无法与活套正确交互。

您正在传递的值太小,因为它以毫秒为单位,如果您希望它停止4秒,通过4000秒,它可能没有您描述的行为,但您的睡眠占用了CPU,因此此线程中无法运行任何东西。安卓肯定有与java.awt.image.ImageObserver相当的