我需要继续运行一个线程,该线程使用来自android设备的相机的帧进行图像处理。
我试过最简单的方法
new Thread() {
    @Override
    public void run() {
        while (true) {
            /* Processing frames here */
        }
    }
}.start();
但这会过多地占用 CPU,并且 UI 开始滞后。此外,Thread.sleep(300)在处理帧之后添加,以便 UI 线程可以获得一些 CPU 时间,但尽管它确实在一定程度上有所帮助,但感觉不是正确的方法。
我想对处理这个问题的好方法有一些想法。
编辑:使用AsyncTask
private DetectionTask detectionTask;
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
    /* Doing some stuff here */
    camera.addCallbackBuffer(data);
    if (detectionTask != null && detectionTask.getStatus() != AsyncTask.Status.FINISHED)
        return;
    detectionTask = new DetectionTask();
    detectionTask.execute();
}
private class DetectionTask extends AsyncTask<Void, Void, float[]> {
    @Override
    protected float[] doInBackground(Void... params) {
        /* Processing frames here */
        return result;
    }
    @Override
    protected void onPostExecute(float[] result) {
        if (result != null) {
           /* Update UI */
        }
    };
};