0

カメラ アプリケーションにマルチショット機能があります。私はそれを行うために次の短いコードを使用しています。

if (TIMER_STARTED) {
    multishotTimer.cancel();
    multishotTimer.purge();
    multishotTimer = null;
    TIMER_STARTED = false;
} else {
    multishotTimer = new Timer();
    multishotTimer.schedule(new TimerTask() {

        @Override
        public void run() {
            TIMER_STARTED = true;
            Camera camera = surfaceView.getCamera();
            camera.takePicture(null, null,
                    new HandlePictureStorage());
        }
    }, 1000, 5000L);
}

ここで、TIMER_STARTEDは、タイマーが開始されているかどうかを示すブール値のフラグです。HandlePictureStorageはPictureCallbackを処理するクラスです。

質問: 「マルチショット」ボタンを初めてクリックすると、タイマーが開始され、5 秒ごとに写真が撮影されます。タイマーを停止するには、同じボタンをもう一度クリックします。しかし、ボタンを連続してクリックすると、アプリケーションがハングして強制停止します。その後、停止したサービスでカメラが使用されているため、デバイスの電源を切る必要があり、簡単に解放できません。タイマーの開始と停止を管理するにはどうすればよいですか?

4

2 に答える 2

0

たとえば、タイマーをスケジュールした後、TIMER_STARTED = true;タイマー タスクからパーツに移動する必要があります。else

パフォーマンスを向上させるにはTimerTask、タイマーを作成して開始するたびに匿名クラスを再作成するのではなく、フィールドを作成する必要があります。

于 2013-06-04T15:21:33.193 に答える