我们有一个移植到Android的库代码库。我已经成功将它从Windows移植到iOS。但是出于某种原因,NDK构建的版本比我在iPhone 5c上构建和运行的版本慢大约5-8倍。我认识到缓慢可能只是设备(三星Galaxy S3),但在讨论后我们商店的共识是其他原因是主要原因。
我确定ndk-build正在生成一个发布版本,因为默认情况下会这样做 - 如果需要,你必须通过make文件或命令行明确地做它。
它涉及处理相机图像,一旦将相框移到图书馆进行处理,我就完全停止了相机。我最初担心的是,通过不正确地使用相机,Android占用资源的程度达到了调用库方法的时候,缓慢是不可避免的。但它只是一个准系统应用程序 - 没有任何进展,但相机帧的正常显示,并将它们传递到库进行处理(2个功能,虽然第二个相当广泛)。
我正在库中的函数级别生成时序信息 - 相同的方法执行速度较慢,但并不总是5-8倍,有时只有3倍。
设备上没有其他应用正在运行。
如果它不太可能只是缓慢的硬件,我可以使用有关如何解决此问题的建议。我们的CTO(一个非常聪明,经验丰富的人)向我保证Galaxy S3在性能上应该更接近iPhone 5。源代码是相同的,只是它是使用NDK而不是Xcode或Developer Studio构建的。
在onPreviewFrame()中,我启动了AsyncTask,它只是将调用放入库中。一些代码:
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
if ((imageFormat == ImageFormat.NV21) && (!m_bProcessingInProgress))
{
if (data == null)
return;
m_bmpGrayScale = null;
m_bProcessingInProgress = true; // this indicates that we are processing a video frame
m_camera.stopPreview(); // halt camera while chewing on pixels
new ProcessPreviewDataTask().execute(data); // launch AsyncTask
}
else
{
if (data != null)
m_camera.addCallbackBuffer(data);
}
}