我在使用线程中的JNI调用本机函数时遇到了一个棘手的问题.
本机函数是执行计算密集型任务的遗留代码.由于我不想冻结程序的其余部分,因此应该在后台线程中执行计算.EventBus用于将计算结果发送回主程序.
基本上它应该很简单,像这样:
public class CalculationEngine {
private CalculationEngine(){}
public static void calculateInBackground(final Parameters parameters) {
new Thread(new Runnable() {
public void run() {
// Someone might change the parameters while our thread is running, so:
final Parameters clonedParameters = parameters.clone();
Results results = new Results();
natCalc(clonedParameters, results);
EventBus.publish("Results", results);
}
}).start();
}
public static void calculateNormally(final Parameters parameters) {
Results results = new Results();
natCalc(parameters, results);
EventBus.publish("Results", results);
}
private static native synchronized void
natCalc(Parameters …Run Code Online (Sandbox Code Playgroud)