名前付きパイプを使用してC++アプリケーションと通信するJavaアプリケーションを作成しています。C ++アプリケーションが停止すると、JavaはSIGPIPEを取得し、Javaアプリケーションは停止します。
C / C ++では、その信号をキャッチして無視する方法を知っています。Android / Javaで同様のことを行うことは可能ですか?
これは実際には不可能のようです。利用可能な最善の解決策は、ここで説明するように、シャットダウンフックを追加し、アプリケーションを「正常に」再起動することです。
編集:
これが必要だったのは、(当時)FDとr/wを開いたJNIコードがあったからです。FDは名前付きソケット(Unixパイプ)に対して開かれ、パイプのリモート側(私の場合はデーモンまたはAndroid C /サービス)が接続を閉じる(または停止する)と、あなたの側が信号を受け取ります。これは必ずしも良いとは限りません。これを処理するのに最適なIMHOは、古き良きプレーンCコードのシグナルハンドラーを使用し、それを飲み込むことです(それ以外の場合は、アプリのJava側に通知する必要があります)。