Android中与外部进程通信和调用外部程序

当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程。之前我写过两篇关于进程的笔记,请看:

在Java中执行外部程序,是通过java.lang.Runtime对象的exec()方法来完成的。Runtime中重载了6个exec方法,返回一个java.lang.Process对象实例。
这个进程类主要功能是与外部进程通信的,看过API的同学也许已经看到了,android也提供了一个进程类,android.os.Process,这个类呢,文档上的Overview写道:Tools for managing OS processes,它是一个管理OS进程的工具,再看它的方法,提供了killProcess、sendSignal等等。
我们再回过头来看java.lang.Process的方法:
getInputStream():获取相关进程的输入流
getOutputStream():获取相关进程的输出流
waitFor ():等待外部进程执行完,返回进程的出口值
exitValue ():返回本地进程(native process)的出口值

下面是一个我们经常会见到的例子,也是文档中描述的例子:

private static void ping()   {       Process process=null;      try {          process = new ProcessBuilder()          .command("ping""www.google.com")          .redirectErrorStream(true)          .start();        InputStream in = process.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(in));        String s = null;           while((s = br.readLine())!= null)           {               System.out.println(s);           }      }       catch(IOException e)       {           e.printStackTrace(System.out);           System.err.println("创建进程时出错");           System.exit(1);       }       finally {        process.destroy();      }    }  

这段程序调用ping命令,并获取输入流打印出来。这里也用到了java.lang.ProcessBuilder来创建一个新的进程。
又使用了command方法和start方法。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwdppp.html