У меня есть библиотека C, к которой я обращаюсь через NDK.Некоторые операции занимают много времени, поэтому поток пользовательского интерфейса останавливается на них.Как я сейчас понимаю, обычной практикой является использование Runnable следующим образом:
myFixedThreadPool.execute(new Runnable()
{
public void run()
{
NativeClass.callToNDKLibrary();
};
});
или подобных потоков:
Thread t = new Thread()
{
public void run()
{
NativeClass.callToNDKLibrary();
}
};
t.start();
, но проблема в том, что библиотека C не безопасна для потоков: она запускаетсяпотерпеть крах, когда я заверну это так.Таким образом, вопрос состоит в том, как отсоединить от потока пользовательского интерфейса, все еще заставляя вызовы NDK запускаться по одному.Может быть поможет какой-нибудь трюк с синхронизированным?Я также хочу отметить, что эта библиотека является основным базовым уровнем для моего приложения, а не просто вспомогательной функцией.Так что он вызывается почти из каждой части моего кода.И только несколько функций занимают время, наиболее быстрое, чтобы держать их в главном потоке.