当用户按下“取消”按钮而不插入取消检查时,如何立即放弃在Android上的本机代码(在C中)中长时间运行的计算?
解释约束:
我很清楚Android上流程生命周期的一般立场是您必须让平台为您管理它。尽管如此,我希望在尽可能少的不支持的操作下尽可能接近上述要求。
我有一个解决方案,但我希望有一个更好的解决方案。例如,如果使用<service>
上的android:process attribute将服务拆分为额外进程,并且其中一个线程进入深度JNI调用,是否有办法立即终止此类进程,或者从内部退出,而不会导致运行时将其视为意外崩溃?
[1]我尝试过取消支票。它的内存分配和控制流程复杂,超过70,000 SLOC(3.1 MB);它并没有考虑到可中断性。这种方式在后续操作中是双重的free()
和难以理解的崩溃。
答案 0 :(得分:3)
以下是我目前所做的事情:
chmod +x
它的路径,执行此操作,并Runtime.exec()
它(我只需要从stdout <1KB)。.destroy()
。支持这一点值得怀疑:NDK文档谈论you can build an executable but it won't get installed的方式。然而,根据经验,它与主流Android设备之间至少在v2.1-5.1之间具有广泛的兼容性。它部署在widely-used app(100,000次下载,约47,000次活动)。
失败的环境,可能是在上面的二进制安装恶作剧中,包括: