java - Android Runtime.getRuntime().exec 命令导致应用程序在获取输出之前卡住

标签 java android unix ping

我正在尝试构建一个可以 ping 服务器并获得延迟的应用程序。为了哪个

Process process = Runtime.getRuntime().exec(pingCommand);

命令调用system/bin/ping -c命令。

因此,当我从 UI 中按下计算(我使用的按钮)时,它会卡住应用程序,直到执行完成。如何解决卡住问题,以便我可以在获取答案时关闭键盘?

最佳答案

为了避免 UI 卡住在线程中运行

new Thread(new Runnable() {
        public void run() {

            try {
                // Send script into runtime process
                Process process = Runtime.getRuntime().exec(pingCommand);

                // ......

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // .....
            }
        }
    }).start();
}

替代方案

您可以像这样使用AsyncTask:

private class YourTasksClass extends AsyncTask<Void, Void, String> {


    private String cmd;

    public YourTasksClass(String command) {
        this.cmd = command;
    }

    @Override
    protected String doInBackground(Void... voids) {


        try {
            Process process = Runtime.getRuntime().exec(cmd);

            // ....

            String someResult = "some kind of result";

            return someResult;

        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        if(result != null) {
            Log.d("tag", "Result: " + result);
        }

    }
}

稍后在代码中,您可以通过以下方式调用它:

new YourTasksClass(pingCommand).execute();

关于java - Android Runtime.getRuntime().exec 命令导致应用程序在获取输出之前卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518928/

相关文章:

java - 核心 Java 和 JVM 安全性防止代码注入(inject)

java - 井字游戏板的所有可能性 - 代码日志 - Java递归通用树

bash - 如何使用 Unix 变量在 session {bash} 中设置和保留值

java - 如何获取Url的一段

java - 如何将数据库中的信息(使用 java 代码检索)打印为 html?

android - Cocos2d 中的 ScrollView - android

android - (Android) 不断收到 SQL 语句错误

java - 如何控制google play排行榜登录

C 函数,打印到缓冲区

unix - 为什么有用户上下文和内核上下文... unix