Reuse (android) ein Verfahren, nach dem Spülen seines Outputs - Java

stimmen
47

im Versuch, dies zu tun, auf 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();

Das zweite Mal auszuführen I out.writeBytes (); , Erhalte ich eine Java-IOException: Bad file number. Meine App hat mehrere einheimische Programme auszuführen, aber immer den gleichen Prozess. Wer weiß, warum dies nicht funktioniert?

Veröffentlicht am 28/08/2010 um 13:01
vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Wenn Sie anrufen out.close(), wird es ruft automatisch close()auf dem ouputstream Ihres Prozesses.

Jedes Mal , wenn Sie rufen p.getOutputStream()Sie erhält das gleiche OutputStream, auf dem zweiten Einsatz aus, p.getOutputStream()gibt eine bereits geschlossen OutputStream.

Im Grunde genommen mit Ihrem Code, brauchen Sie nicht wirklich die ersten zu schließen DataOutputStream.

Quellen:

Beantwortet am 28/08/2010 um 13:12
quelle vom benutzer

stimmen
1

Beachten Sie, dass der Schal nicht Teil des öffentlichen SDK ist (beachten Sie, es ist nicht überall in der SDK-Dokumentation dokumentiert), sodass dieser Code in Wirkung auf private APIs angewiesen zu sein.

Auch dies bringt Sie außerhalb des normalen Anwendungsmodell - wir keine Garantie haben, was zu einem Prozess geschehen Sie gegabelt haben und wird nicht von der Plattform verwaltet werden. Es kann jederzeit getötet werden.

Dies ist auch ein sehr ineffizienter Weg, Dinge zu tun, im Vergleich zu tun, was der Befehl in Ihrem eigenen Prozess tut. Und einen separaten Prozess für einen Befehl Start wird es tun nichts lassen mehr als Sie können, weil es immer noch als uid läuft.

Also im Grunde ... für 99,99% der Anwendungen bitte tut dies nicht. Wenn Sie eine Terminal-App schreiben ... na ja, okay, nur Geeks werden darüber sowieso kümmern, und es wird nicht viel nützen werde, da es als uid läuft, aber okay. Aber sonst, bitte nicht. :)

Beantwortet am 28/08/2010 um 19:23
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more