当我试图以这种方式执行外部脚本时:

try {
    process = Runtime.getRuntime().exec(
        new String[] { "/system/bin/sh", "./myscript.sh" },
        null,
        "/data/mydir",
    );
} catch (IOException e) {
    Log.e(TAG, e.getMessage(), e);
} catch (SecurityException e) {
    Log.e(TAG, e.getMessage(), e);
}

有时脚本会被执行,但大多数情况下,我的应用程序会挂起几秒钟,直到android说我的应用程序没有响应,需要终止它。
我的问题是,可能会发生什么。脚本有时正在运行,没有异常被抛出,它只是挂起。我不知道发生了什么事。我用的是Froyo(我想是2.2.1)。
谢谢!

最佳答案

根据文档,您应该阅读错误和流程的输出流。
http://developer.android.com/reference/java/lang/Process.html
我想下面的事情可以解决你的问题。

class Reader extends Thread
{
    InputStream is;

    Reader(InputStream is){
        this.is = is;
    }

    public void run()
    {
        try
        {
            InputStreamReader inStreamReader = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(inStreamReader);
            String line=null;
            while ( (line = br.readLine()) != null){
                // log here
            }
        } catch (IOException ex){
            ex.printStackTrace();
        }
    }
}

在代码中使用上述类,如下所示
try {
    process = Runtime.getRuntime().exec(
        new String[] { "/system/bin/sh", "./myscript.sh" },
        null,
        "/data/mydir",
    );
    Reader err = new Reader(process.getErrorStream());
    Reader output = new Reader(process.getInputStream());

    err.start();
    outout.start();

} catch (IOException e) {
    Log.e(TAG, e.getMessage(), e);
} catch (SecurityException e) {
    Log.e(TAG, e.getMessage(), e);
} finally {
    process.destroy();
}

09-10 07:34
查看更多