Java - (android) Hergebruik een proces na het spoelen haar OutputStream

stemmen
47

im proberen om dit te doen op 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();

De tweede keer uitvoeren out.writeBytes (); , Krijg ik een java IOException: Slechte dossiernummer. Mijn app heeft verschillende inheemse programma's uit te voeren, maar altijd hetzelfde proces. Iedereen weet waarom dit niet werkt?

De vraag is gesteld op 28/08/2010 om 13:01
user
In andere talen...                            


2 antwoorden

stemmen
0

Wanneer u belt out.close(), zal het automatisch een oproep close()aan de ouputstream van uw proces.

Elke keer dat je belt p.getOutputStream()krijg je het zelfde OutputStream, op uw tweede gebruik van uit, p.getOutputStream()keert een reeds gesloten OutputStream.

In principe met de code, heb je niet echt nodig om de eerste te sluiten DataOutputStream.

bronnen:

antwoordde op 28/08/2010 om 13:12
bron van user

stemmen
1

Merk op dat de shell geen deel uitmaakt van de openbare SDK (let op het is nergens gedocumenteerd in de SDK-documentatie), zodat deze code is in feite een beroep op private API's.

Ook dit brengt u buiten de normale toepassing model - we hebben geen enkele garantie wat er zal gebeuren om een ​​proces dat je hebt gevorkte en niet wordt beheerd door het platform. Het kan krijgen gedood op elk moment.

Dit is ook een zeer inefficiënte manier om dingen te doen, in vergelijking met het doen van wat het commando doet in uw eigen proces. En het starten van een apart proces voor een commando zal niet toestaan ​​dat het iets meer dan je best doen, omdat het nog steeds als uw uid loopt.

Dus eigenlijk ... voor 99,99% van de apps kunt u dit niet doen. Als u het schrijven van een terminal app ... nou ja, oke, alleen geeks gaan schelen hoe dan ook, en het zal niet veel nut te zijn, omdat het draait als je uid, maar goed. Maar voor de rest, dan kunt u niet. :)

antwoordde op 28/08/2010 om 19:23
bron van user

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