我一直在开发一个Mobile应用程序,用于分析寻找特定对象的框架。处理很重,我一直在
05-08 17:44:24.909: I/Choreographer(31606): Skipped 114 frames! The application may be doing too much work on its main thread.
所以我将图像处理切换到线程,现在它更快但我无法识别任何对象。数据(不同的帧)没有更新,我不知道为什么。这是我在伪代码中所做的事情(SurfaceHolder.Callback,Camera.PreviewCallback和camera.addCallbackBuffer(数据)的实现)
public void onPreviewFrame(byte[] data, Camera camera)
{
Imageprocessor np = new ImageProcessor(data);
np.start()
results = np.getResults();
}
从我到目前为止所做的调试开始,我知道开始分析整个帧,但是。数据没有更新它保持堆叠在第一帧。如果我在主线程中这样做,就不会发生这种情况,
public void onPreviewFrame(byte[] data, Camera camera)
{
Imageprocessor np = new ImageProcessor();
np.process(data)
results = np.getResults();
}
这有效,但它迫使我跳过很多帧。答案可能很简单,但我无法在网上找到它。
如果我发布一个非常棒的问题,请原谅我
提前致谢
答案 0 :(得分:0)
这是因为在单线程情况下,np.process()
在执行results=...
之前已完成,但在线程情况下,results=...
在启动线程后立即执行。除非getResults()
等待所有线程完成?