在分析帧时从主线程切换到多线程

时间:2014-05-08 22:57:44

标签: android multithreading android-camera surfaceholder

我一直在开发一个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();
 }

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

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

提前致谢

1 个答案:

答案 0 :(得分:0)

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