杀死Android上长期运行的本机代码

杀死Android上长期运行的本机代码,android,android-ndk,kill-process,Android,Android Ndk,Kill Process,当用户按下Cancel按钮时,我怎么能立即放弃Android上本机代码(C)中的长时间运行的计算,而不插入取消检查 要解释这些限制,请执行以下操作: 此本机代码太复杂,无法插入足够的取消检查或进度信息[1],因此必须强制终止进程 Android应用程序的UI必须保持运行(因此是一个单独的进程),以便用户使用不同的参数方便地重试 一次不需要支持多个这样的计算 我很清楚,Android上进程生命周期的一般立场是,您必须让平台为您管理它。尽管如此,我还是希望通过尽可能少的不受支持的操作来尽可能接近

当用户按下Cancel按钮时,我怎么能立即放弃Android上本机代码(C)中的长时间运行的计算,而不插入取消检查

要解释这些限制,请执行以下操作:

  • 此本机代码太复杂,无法插入足够的取消检查或进度信息[1],因此必须强制终止进程
  • Android应用程序的UI必须保持运行(因此是一个单独的进程),以便用户使用不同的参数方便地重试
  • 一次不需要支持多个这样的计算
我很清楚,Android上进程生命周期的一般立场是,您必须让平台为您管理它。尽管如此,我还是希望通过尽可能少的不受支持的操作来尽可能接近上述要求

下面我有一个解决方案,但我希望有一个更好的。例如,如果您在
上使用将服务拆分为一个额外的进程,并且其中一个线程进入深度JNI调用,是否有办法立即终止该进程,或从内部退出该进程,而不会导致运行时将其视为意外崩溃



[1] 我试过取消支票。它有超过70000个SLOC(3.1MB),其内存分配和控制流非常复杂;写这篇文章时没有考虑到可中断性。这样就有了双重的自由()和后续操作中难以理解的崩溃。

以下是我目前所做的:

  • In:编译一个纯本机可执行文件,就像用于命令行调用一样。
    • 搜索其他人这样做的神奇词汇是
    • 必须将其命名为库,以说服构建工具将其包括在内,并说服设备上的包安装程序将其解包
    • 这在未来还无法实现,我真的希望最终版本将以某种迂回的方式打开这扇门
  • 当需要时,将它复制到一个路径,在那里我可以
    chmod+x
    it,然后
    Runtime.exec()
    it(我只需要