gpt4 book ai didi

java - 实现连续线程的高效方式

转载 作者:行者123 更新时间:2023-11-29 05:37:18 24 4
gpt4 key购买 nike

我需要继续运行一个线程,该线程使用来自 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 */
}
};
};

最佳答案

考虑使用 Service而不是 Thread。对于必须不时在另一个线程上执行某些工作的长时间运行的进程,它是一种常用工具。

关于java - 实现连续线程的高效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19019228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com