4

サービス開始時に次のコードを実装する Android アプリケーションがあります。

...
Process process = Runtime.getRuntime().exec("logcat -v time -s " + arg);
BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
...

ご覧のとおり、logcat プロセスを開始してログをリッスンします。残念ながら、停止サービスはlogcatを停止せず、数回起動した後、次のようになります:

app_125   4782  144   137124 30584 ffffffff 00000000 S com.wefi.agnt.ui
app_125   4796  4782  1028   592   ffffffff 00000000 S logcat
app_125   4839  4782  1076   640   ffffffff 00000000 S logcat
app_125   4842  4782  952    516   ffffffff 00000000 S logcat
app_125   4845  4782  896    460   ffffffff 00000000 S logcat
app_125   4848  4782  900    464   ffffffff 00000000 S logcat
app_125   4851  4782  876    440   ffffffff 00000000 S logcat
shell     4852  171   788    336   c00cc7e4 afd0c78c S /system/bin/sh
shell     4853  4852  944    332   00000000 afd0b83c R ps
app_123   11189 144   114484 18908 ffffffff 00000000 S com.mspot.android.moviesClub.att  

... logcat プロセスのリスト。どうすれば彼らを殺すことができますか?

何か案は

4

2 に答える 2

2

インスタンスのハンドルを持っているので、サービスを停止するときProcessに使用できるはずです。process.destroy()Logcat プロセスはアプリとは独立して実行されているため、アプリのService実行が停止した後も、終了しない限り引き続き実行されます。

アプリのテスト中にデバイスのプロセスをクリーンアップするだけの場合は、実行adb shellしてデバイスでシェル プロンプトを取得し、 を使用kill <PID>してプロセスを終了できます。

編集

ドキュメントには、プロセスのセットアップと実行にProcess使用する必要があることも指定されています。ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("logcat", "-v", "time", "-s", arg);
pb.redirectErrorStream(true);
Process process = pb.start();
...
于 2012-10-17T18:54:43.337 に答える