永远等待Handler.postDelayed执行

时间:2012-11-20 22:38:03

标签: android multithreading camera handler postdelayed

我正在尝试使用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;
        }

1 个答案:

答案 0 :(得分:1)

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

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

所以最好的方法是删除Infinity loop,并在runnable调用结束时继续使用流程或监听器的方法。