Java - (android) Ponowne wykorzystanie procesu spłukiwania po jego OutputStream

głosy
47

Im próbuje to zrobić na Androida:

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();

Drugi raz wykonać out.writeBytes (); , Otrzymuję IOException Java: „Zły numer pliku”. Moja aplikacja musi wykonać kilka programów natywnych, ale zawsze używać tego samego procesu. Ktoś wie dlaczego to nie działa?

Utwórz 28/08/2010 o 13:01
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Podczas rozmowy telefonicznej out.close(), zostanie ona automatycznie zadzwonić close()na ouputstream swojego procesu.

Za każdym razem gdy nazywają p.getOutputStream()cię dostać taki sam OutputStream, na swoim drugim wykorzystania out, p.getOutputStream()zwraca już zamknięte OutputStream.

Zasadniczo z kodem, naprawdę nie trzeba zamykać pierwszą DataOutputStream.

źródła:

Odpowiedział 28/08/2010 o 13:12
źródło użytkownik

głosy
1

Zauważ, że powłoka nie jest częścią zestawu SDK publicznego (należy pamiętać, że nie jest nigdzie udokumentowane w dokumentacji SDK), więc ten kod jest w rzeczywistości, opierając się na prywatnych API.

Również ten stawia się poza normalnym modelu aplikacji - mamy żadnej gwarancji, co stanie się z procesem masz rozwidloną i nie jest zarządzany przez platformę. To może zginąć w każdej chwili.

Jest to również bardzo nieefektywny sposób, aby robić rzeczy, w porównaniu do co robi komenda robi w swoim własnym procesie. I rozpoczęcie oddzielny proces polecenia nie pozwoli zrobić nic więcej niż to możliwe, ponieważ nadal działa jako uid.

Więc w zasadzie ... 99,99% aplikacji proszę nie rób tego. Jeśli piszesz aplikację terminala ... no, dobra, tylko maniacy będą dbać o to i tak, i nie będzie zbyt użyteczne ponieważ działa jako uid, ale w porządku. Ale poza tym, proszę nie. :)

Odpowiedział 28/08/2010 o 19:23
źródło użytkownik

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