【概念】
Runtime 封装着java程序的运行时环境。
通过Runtime实例,java应用能够与其运行的环境连接。
通过Runtime.getRuntime()来获的当前Runtime的一个实例;获得Runtime实例后,就可以通过Runtime的exec()方法在当前jvm进程外,
启动其他进程了。
【例子】
启动浏览器进程来显示一个程序的帮助页面。
【接口】
public Process exec(String command);
public Process exec(String [] cmdArray);
public Process exec(String command, String [] envp);
public Process exec(String [] cmdArray, String [] envp);
备注: command -- 启动进程的名称; 以及启动该进程时需要的参数。envp -- 环境相关的属性
【实际运用】
通常,启动另外一个进程后,需要获取另外一个进程的执行结果,
然后根据结果执行后续的流程。
要获取外部进程的运行结果 有2种方法:
(1)调用Process的exitValue() 方法 ----> exitValue()方法并不会等待外部进程结束。
如果外部进程还未结束,exitValue()将会抛出IllegalThreadStateException
(2)调用Process的waitfor()方法 --- > waitfor()方法会挂起当前线程,一直等到外部进程结束(推荐)
【本人项目经历】
是为了完成截屏功能,截屏完之后,进行系列操作。
/**
* Description : 开启截取屏幕进程
* @return int 0 - screencap 进程正常退出 其它 - 异常
*/
private int takeScreenShot(){
int Err = -1;
int exitVal = -1;
Process mProcess = null;
String mSavedPath = TVAd_MainActivity.getDirPath() + "/" + CaptureName;
try {
mProcess =Runtime.getRuntime().exec("screencap -p " + mSavedPath);
exitVal = mProcess.<span style="color:#ff0000;">waitFor</span>(); // waitfor()方法会挂起当前线程,一直等到外部进程结束
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "takeScreenShot():e.printStackTrace(); ");
return Err;
}
return exitVal;
}