Как получить активный движок объекта в OpenSLES
Я столкнулся с проблемой при использовании OpenSLES на Android 2.3.
Когда я пытался создать объект движка, я получил следующую ошибку: slcreateengine, когда другой движок активен
Я знаю, что OpenSLES для Android(2.3? Потому что я не нашел эту проблему в Android 4.x) поддерживает один движок, но я просто не знаю, откуда взялся другой движок.
Есть ли какой-либо интерфейс в OpenSLES, чтобы проверить, есть ли уже активный движок или нет?
Заранее спасибо за любые подсказки!
1 ответ
Это поражает и меня, и большую часть времени, когда приложение работает, но время от времени я обнаруживаю, что эта ошибка приводит к неработоспособному движку openSL, но я заметил это только на Android 2.3.
SL_RESULT_RESOURCE_ERROR может быть выброшен по разным причинам, например, из-за ошибки pthread, нехватки памяти и т. Д. Но они будут возвращать соответствующие коды ошибок.
Скорее всего, это сводится к архитектуре приложения, есть ли несколько битов кода, которые создают объект движка, или есть только одна точка входа? На самом деле вы не можете получить активные объекты движка из OpenSL, поэтому вы должны хранить все указатели / ссылки на объекты движка, которые вы передаете в метод slCreateEngine. Хорошей идеей будет проверить их состояние (и закрыть механизмы) перед запуском метода create engine, так как возможно, что он запускается несколько раз (например, методы onCreate / onPause / onResume вашей Activity могут вызывать новое творение).