我有一个OpenSL ES函数调用,它在一个应用程序中没有问题,但在另一个应用程序中导致问题,都在同一个设备上运行。
该行是:
result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
如果结果属于SLresult
类型,则engineObject属于SLObjectItf
我似乎得到的错误是:
05-19 11:56:27.007: ERROR/libOpenSLES(1425): slCreateEngine while another engine 0x299fa0 is active
似乎这不是从我的代码中记录的,但可能是由它引起的?那么什么可能导致这一行在一个应用程序中产生错误,而在另一个应用程序中却没有呢?
答案 0 :(得分:1)
碰巧的是,部分Android的Activity生命周期引起了错误,但主要是我自己的错。它是由Android为活动提供的onCreate()和onResume()方法引起的。我从未想过在启动Activity时onResume()也会被调用的事实。因此,我从未意识到我第二次调用了slCreateEngine函数.....
答案 1 :(得分:0)
根据文档“OpenSL ES for Android支持每个应用程序的单个引擎”。我快速检查了OpenSL的来源,我可以看到这是由存储当前活动引擎的全局强制执行的。
因此,如果要调用slCreateEngine,则必须确保首先销毁所有其他引擎。这包括您正在链接的任何第三方代码的可能性(如果您正在链接其他正在创建OpenSL引擎对象的东西)。