当一个程序第一次启动的时候,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方法。