1

我创建了一个CameraApp。并获得byte[]cameraPreviewCallbackonPreviewFrame(byte byteArray[] , Camera camera)

我也在将这些转换byteArrayrgb并做很多事情。所以它工作缓慢。所以我认为我应该从java.util.concurrent包裹中受益。但是没有找到一种简单的方法来处理我想要的东西。

我希望多个线程连续完成我的工作,但每次都可以设置bitmapsurfaceView. 并且还必须检查:

No Old byte of Array shouldn't be draw on surfaceView.

我想我必须使用同步锁来编写该代码。并检查布尔变量isWorkingOnFrametrue.

有人可以向我解释如何串联使用多个线程,但一次可以完成它的工作。

private android.hardware.Camera.PreviewCallback previewCallback = new android.hardware.Camera.PreviewCallback()
    {
        public void onPreviewFrame(byte abyte0[] , Camera camera)
        {   
            try
            {
               Thread.sleep(1L);
            }
            catch (InterruptedException interruptedexception)
            {
                return;
            }

            int[] rgbData =  YuvUtils.myDecodeGreyscale(abyte0, widthPreview, heightPreview, imageBrightness, nonGreencolorOffset, greenColorOffset);  ///it is working...

            editedBitmap.setPixels(rgbData, 0, widthPreview, 0, 0, widthPreview, heightPreview);

            if(CameraStatik.cameraId==CameraInfo.CAMERA_FACING_FRONT)
            {   
                matrix.setRotate(270F);
            }

            finalBitmap = Bitmap.createBitmap(editedBitmap, 0, 0, widthPreview, heightPreview, matrix, true);

            if(saveCurrentFrame)
            {
                saveCurrentFrame =false;

                new BitmapSaver(ctx, finalBitmap).start();
            }

            drawView.setBitmapToDraw(finalBitmap);
        }
    };

我只是想让这段代码有效地工作。

4

1 回答 1

1

用java的方式解决!与 一起使用该Executor界面Runnable

首先,用 获取一个ExecutorService(实现Executor接口)Executors.newSingleThreadExecutor(),然后让你的线程工作。

例子:

public YourClass extends Activity {
    // Other methods like onCreate() variable declarations and so on.
    // ...

    private void runOnThread() {
        Executor exe = Executors.newSingleThreadExecutor();
        exe.execute(new Runnable() { 
            public void run() { 
                // Do whatever you want to do.
            } 
        });
    }
    // Other methods...
    // ...
}

Executor 您可以在此处阅读更多信息。

ThreadPoolExecutor或者就像评论中说的那样,你可以看看这个教程

于 2015-08-12T13:51:20.813 回答