1

Androidでこれをやろうとしています:

Process p = Runtime.getRuntime().exec("sh");

   DataOutputStream out = new DataOutputStream(p.getOutputStream());

   out.writeBytes("something useful\n");

   out.close();

   p.waitFor();

   out = new DataOutputStream(p.getOutputStream());

   out.writeBytes("something useful\n");

   out.close();

   p.waitFor();

2 回目に out.writeBytes(); を実行します。、Java IOException: "Bad file number" が発生します。私のアプリはいくつかのネイティブ プログラムを実行する必要がありますが、常に同じプロセスを使用します。これが機能しない理由を知っている人はいますか?

4

2 に答える 2

1

シェルはパブリック SDK の一部ではないことに注意してください (SDK ドキュメントのどこにも記載されていないことに注意してください)。そのため、このコードは実際にはプライベート API に依存しています。

また、これにより、通常のアプリケーション モデルから外れることになります。フォークしたプロセスがプラットフォームによって管理されていない場合にどうなるかは保証されません。いつでも殺される可能性があります。

これは、コマンドが独自のプロセスで行っていることを行う場合と比較して、非常に非効率的な方法でもあります。また、コマンドの別のプロセスを開始しても、コマンドは引き続き uid として実行されるため、実行できる以上のことはできません。

基本的に... 99.99% のアプリでは、これを行わないでください。端末アプリを作成している場合... まあ、まあ、オタクだけがとにかくそれを気にするでしょう.それはあなたの uid として実行されるのであまり役に立ちませんが、大丈夫です. それ以外の場合は、いいえ。:)

于 2010-08-28T20:23:38.857 に答える
0

を呼び出すとout.close()、プロセスの出力ストリームで自動的に呼び出さclose()れます。

呼び出すp.getOutputStream()たびに同じが返さOutputStreamれ、out を 2 回目に使用するとp.getOutputStream()、既に閉じられている が返されますOutputStream

基本的にあなたのコードでは、最初の を閉じる必要はありませんDataOutputStream

ソース:

于 2010-08-28T14:12:21.193 に答える