我在閱讀有關如何獲取正在運行的進程在android中運行的進程的PID,該運行進程不在dalvik內運行(例如,後臺本機進程)在自定義設備(中文框)上運行android 2.2,似乎沒有原生的方式來做到這一點在Java中。Android Runtime.getRuntime()。exec
我能想到的唯一方法就是執行「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與它通信檢查該進程是否正在運行。