调用Runtime.exec()的一些陷阱

【概念】

            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;
    }















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值