gpt4 book ai didi

安卓运行时.getRuntime().exec

转载 作者:行者123 更新时间:2023-11-30 04:26:35 25 4
gpt4 key购买 nike

我正在阅读有关如何在运行 android 2.2 的自定义设备(中文框)上不在 dalvik(例如,后台 native 进程)内运行的 android 中获取正在运行进程的 PID 的信息,似乎没有在 Java 中执行此操作的 native 方法。

我能想到的唯一方法是执行“ps”并解析输出,但我遇到了一个奇怪的问题。

如果我在这种情况下运行 Runtime.getRuntime().exec("ps ") 一个 ndk 编译的 mplayer 端口,经过一段随机时间后,该命令将永远不会返回。

代码如下:

Process process = null;
process = Runtime.getRuntime().exec("ps mplayer");
BufferedReader reader = new BufferedReader( new InputStreamReader(process.getInputStream()),8192);

char[] buffer = new char[8192];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
process.getErrorStream().close();
process.getOutputStream().close();
process.waitFor();

然后对输出缓冲区进行一些解析,并查看输出中是否存在 mplayer。

这在一段时间内非常有效,随机时间段,比如从 1 小时到 3-4 小时,当代码在尝试 .exec() 时突然停止工作

如果我通过带有 .postDelayed 的可运行对象在主线程中运行它,这样它就可以运行多次,这显然会破坏主线程。

如果我在单独的线程上运行它,我会得到相同的行为,当然不会阻塞主应用程序线程。

我一直在每秒、每 5 秒、每 10 秒运行一次检查,结果相同。

我注意到一件奇怪的事情(不确定它是否是问题结果的原因)是当 exec 不工作时,通过在 adb shell 中发出 ps,我可以看到我的 2 个正在运行的应用程序,一次我杀了最近的,它又开始工作了。

有没有人遇到过类似的问题?我不确定是不是盒子的 android 有问题,这是一个编码问题(可能与我没有做的 exec 相关)或者是否有另一种方式,缺少 NDK 编译的后台应用程序并通过 IPC 与其通信检查该进程是否正在运行。

最佳答案

如果您使用服务每 5 秒检查一次,那么您必须从覆盖方法 onStartCommand() 返回 START_NOT_STICKY 以防止它在崩溃时自动启动服务.

关于安卓运行时.getRuntime().exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376697/

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