【问题标题】:Stop running execution of JNI method停止运行 JNI 方法的执行
【发布时间】:2016-07-01 07:08:00
【问题描述】:

我有 JNI 库的执行方法(例如 JNI.calculate(listener))。例如,它应该需要 30 秒。我想要但再次执行此方法 calculate(listener) 但首先我需要停止最后一次执行。该方法有一个参数——监听器,它有两种方法:

public void canContinue(){
      return canContinue;
}

public void result(int number){
      //some code
}

canContinue 方法异步调用,例如 每 3 秒调用一次。我只是不想等待,直到下一个 canContinue 将被调用。我想立即执行此方法的下一次执行 calculate(listener)

你有什么建议吗?可能我应该使用 Handler, HandlerThread, Thread, AsyncTask 之类的此类,但是如何弄清楚呢?

【问题讨论】:

标签: android multithreading java-native-interface thread-safety android-handler


【解决方案1】:

我没有正确理解这个问题,但我认为保持延迟可以解决问题,保持延迟写这个

try {       
      Thread.sleep(1000); // time in milliseconds
    } catch (InterruptedException e) {
         e.printStackTrace();
      }

【讨论】:

  • 这是一种不好的做法。我可以阻止 UI 和分离线程。我认为必须有更好的方法。 @雷德曼
【解决方案2】:

如果你从 Thread 调用你的函数 JNI.calculate(listener) 会怎样?您可以启动调用此函数的线程,当您想要另一个立即执行时,中断线程和启动另一个(永远不要重新启动已终止的线程!)。小心处理数据:您应该使用 mutex 来防止它。

也看到了(它是关于线程中断并给出了一些精度):

https://stackoverflow.com/a/6378525/6523232

【讨论】:

  • JNI.calculate(listener) 方法在单独的线程上运行,这不符合 Android 应用程序的逻辑。 @N0un
  • 我明白了。我也发现了:stackoverflow.com/a/14814420/6523232@user997777
猜你喜欢
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
相关资源
最近更新 更多