0

我一直在研究一个移动应用程序,它分析框架以查找特定对象。处理太重了,我不断得到

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(data) 已实现)

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();
 }

这有效,但它迫使我跳过很多帧。答案可能很简单,但我在网上找不到。

如果我发布一个非常菜鸟的问题,请原谅我

提前致谢

4

1 回答 1

0

这是因为在单线程情况下,在np.process()执行之前就完成results=...了,但在线程情况下,results=...在启动线程后立即执行。除非getResults()等待所有线程完成??

于 2014-05-09T01:32:02.913 回答