gpt4 book ai didi

安卓 :Launching Iperf as separate process

转载 作者:太空狗 更新时间:2023-10-29 14:21:57 25 4
gpt4 key购买 nike

您好,我正在使用 iperf 来测试网络吞吐量,为此我正在使用 NDK 创建 iperf c 代码的可执行文件,并且我能够成功启动该过程,如下所示:

 Process process ;
process = new ProcessBuilder().command(commandList).redirectErrorStream(true).start();

但我担心的是,万一我的应用程序在某个时候崩溃(因此没有崩溃,但万一它崩溃了)然后外部进程继续运行,所以我需要一种方法来随时销毁这个进程任何 Activity 或服务的时间。因此,如果有人有任何想法,请提供帮助。

最佳答案

嗯,在 JVM 领域通常的解决方案是使用 Runtime.addShutdownHook但 Android 版本带有此警告:

Note that on Android, the application lifecycle does not include VM termination, so calling this method will not ensure that your code is run. Instead, you should use the most appropriate lifecycle notification (Activity.onPause, say).

既然你关心崩溃,你可以在任何可能崩溃的线程上设置未捕获的异常处理程序来终止子进程(查找 Thread.setUncaughtExceptionHandler )。

除此之外,如果您知道 PID,则可以使用 kill发送信号(因为我们没有 pkill)。你可以尝试做 Runtime.getRuntime().exec("kill -SIGINT <PID-goes-here>");

如果您没有 PID,Android 的标准镜像附带一个版本 ps但不幸的是,目前还不清楚它支持什么语法,所以我建议改为解析它的输出。 (此外,它在基本镜像中的事实让我相信 OEM 版本也会有它)。

但是,是的,这是停止进程的一种不必要的困难方法。这只是您使用 JVM-ish 的东西必须付出的代价——您应该构建 JNI 桥,而不是启动外部进程。

关于安卓 :Launching Iperf as separate process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16050979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com