当用户按下“取消”按钮时,如何在不插入取消检查的情况下立即放弃使用Android中本机代码(以C语言编写)的长期运行?
解释约束:
>该本机代码太复杂,无法插入足够的取消检查或进度信息[1],因此必须强行终止该过程.
> AndroID应用程序的UI必须保持运行(因此需要一个单独的过程),以使用户可以方便地使用不同的参数重试.@H_301_6@>一次无需支持多个这样的计算.
我很清楚,AndroID上流程生命周期的总体立场是必须让平台为您管理它.尽管如此,我希望通过尽可能少的不受支持的 *** 作来尽可能接近上述要求.
我在下面有一个解决方案,但我希望有更好的解决方案.例如,如果您在< service>上使用android:process attribute将服务拆分为一个额外的进程,并且其中一个线程进入了深层的JNI调用,则有一种方法可以立即终止此类进程或从内部退出该进程,而不会导致运行时将其视为意外崩溃?
[1]我尝试过取消检查.超过70,000 SLOC(3.1 MB)的C语言,其内存分配和控制流非常复杂.它在编写时并未考虑中断性.这样就存在double-free()和后续 *** 作中难以理解的崩溃.
解决方法:
这是我目前正在做的事情:
>在build.gradle中:编译仅本机可执行文件,就好像命令行调用一样.
>搜寻其他这样做的魔术词是ndk “BUILD_EXECUTABLE”.@H_301_6@>必须说出它是库的名称,才能说服构建工具将其包括在内,并在设备上安装软件包安装程序以解压缩它.@H_301_6@>这在Android Studio Preview NDK support中尚无法实现,我真的希望最终版本能够以某种round回的方式将这扇门敞开.
>当starting the process时,将其复制到我可以对其进行chmod x的路径,然后执行Runtime.exec()(我仅需要stdout的< 1KB).@H_301_6@>要停止该过程,只需对其调用.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个活动状态).
可能在上述二进制安装过程中失败的环境包括:
> App Runtime for Chrome@H_301_6@> Blackberry
总结以上是内存溢出为你收集整理的在Android上杀死长时间运行的本机代码全部内容,希望文章能够帮你解决在Android上杀死长时间运行的本机代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)