У меня есть библиотека 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 выполняться по одному. Может какой трюк с синхронизацией поможет? Я также хочу упомянуть, что эта библиотека является основным базовым слоем для моего приложения, а не просто вспомогательной функцией. Так что он вызывается почти из каждой части моего кода. И только несколько функций потребляют время, большинство из них быстро удерживают их в основном потоке.