如何确定Android(vs iPhone 5c)设备的缓慢来源?

时间:2015-10-05 22:53:09

标签: android performance android-asynctask android-ndk shared-libraries

我们有一个移植到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);
    }
}

0 个答案:

没有答案