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 に答える