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)的出口值

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

  1. private static void ping()  
  2. {  
  3.     Process process=null;  
  4.    try {  
  5.        process = new ProcessBuilder()  
  6.        .command("ping""www.google.com")  
  7.        .redirectErrorStream(true)  
  8.        .start();  
  9.      InputStream in = process.getInputStream();  
  10.      BufferedReader br = new BufferedReader(new InputStreamReader(in));  
  11.      String s = null;  
  12.         while((s = br.readLine())!= null)  
  13.         {  
  14.             System.out.println(s);  
  15.         }  
  16.    }  
  17.     catch(IOException e)  
  18.     {  
  19.         e.printStackTrace(System.out);  
  20.         System.err.println("创建进程时出错");  
  21.         System.exit(1);  
  22.     }  
  23.     finally {  
  24.      process.destroy();  
  25.    }  
  26.  }  
这段程序调用ping命令,并获取输入流打印出来。这里也用到了java.lang.ProcessBuilder来创建一个新的进程。
又使用了command方法和start方法。
  • 1
  • 2
  • 下一页

相关内容