2

我正在尝试使用 Android 相机拍照。当程序第一次启动时,我需要等待 1 秒左右,以便可以启动预览并拍摄照片。我用 Handler.postDelayed 做到了,它工作正常。

现在,我的问题是我想暂停程序的流程,直到 run() 被执行,其中我使用了一个带有标志的 while(true) 循环来表示该方法已经完成。但是,程序冻结。没有返回错误。任何人都可以发光吗?下面是我的代码

 flag = false;
 handler.postDelayed(new Runnable() { 
             public void run() 
             { 
                 preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
                 preview.camera.startPreview();
                 flag = true;
             } 
        }, 1000);

        while (true)
        {
            if (flag) break;
        }
4

1 回答 1

1

删除while(true)它应该继续,让我解释一下:

Android有一个任务队列,因此当完成当前任务时,它将转到下一个任务,因此在您的情况下,PostDelayed将在完成当前任务后执行Infinity loop,这将永远不会完成,因为循环阻塞了您Runnable的队列.

所以最好的方法是删除Infinity loop, 并在您的可运行调用结束时继续您的流程或侦听器的方法。

于 2012-11-20T22:44:23.390 回答