张国祥的专栏

爱技术,爱分享

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















阅读更多
文章标签: Runtime陷阱
个人分类: 安卓之Runtime
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭