2011-12-04 7 views
1

実行中のプロセスの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の出力に存在するかどうか:

は、ここでは、コードです。

これは(.execしようとすると、コードが突然動作を停止したときに、3-4時間に1時間から言って、いくつかの時間、ランダムな時間のための素晴らしい作品)

私は経由してメインスレッドで実行した場合.postDelayedで実行可能なので、何度も実行できるので、明らかにメインスレッドが壊れます。

私は別のスレッドで実行すると、私はもちろん、メインのアプリケーションスレッドをブロックしない同じ動作を取得します。

私は毎秒5秒おきに10秒ごとにチェックを同じ結果で実行し​​ています。

奇妙なことに、私は(問題の原因が原因であるかどうかは不明ですが)execが動作していないことに気づいた、adbシェルでpsを発行すると、私は2つの実行中のアプリケーションを見ることができます。一度私が最近のものを殺すと、それは再び働き始める。

誰かに同様の問題が発生しましたか?私はそれが欠陥であるボックスのアンドロイドかどうかわからない、それはコーディングの問題(多分何かexecに関連していない)または別の方法があれば、NDKコンパイルされたバックグラウンドアプリを持っていなくて、IPCそのプロセスが実行中であるかどうかをチェックします。

答えて

0

サービスを使用して5秒ごとに確認する場合、クラッシュ時に自動的にサービスを開始しないようにするには、無効化方法onStartCommand()からSTART_NOT_STICKYを無効にする必要があります。

関連する問題