Android アプリは logcat シェル プロセスを生成し、その結果を読み取って処理します。ただし、アプリが停止した場合 (開発中の再コンパイル後に再起動した場合など)、logcat プロセスは実行され続けます。この動作の例を次に示します。
processes = new ArrayList<Process>();
try {
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
} catch (IOException e) {
// oh no!
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
for (Process p : processes) {
p.destroy();
}
};
});
これをテスト アプリの onCreate() メソッドに追加して起動し、設定マネージャーを使用して強制停止します。子プロセスは引き続き実行され、親 ID は 1 になります。
Androidアプリケーションによって開始されたlogcatプロセスを強制終了するには? ProcessBuilder を使用することが提案されましたが、それは解決策ではなく、プロセスも実行され続けます。
「親プロセスが停止したときに子プロセスを停止する」では、シャットダウン フックを使用することが推奨されていましたが、上記のように機能しません。
ありがとう!