You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何实时逐行输出PING命令的运行结果?

实现PING命令实时逐行输出到TextView

要实现像终端那样实时输出ping的延迟统计,核心是实时读取命令的输出流,不能等命令执行完再一次性拿结果,还要避开主线程阻塞,下面是具体实现:

  • 开后台线程执行ping并读取输出:
new Thread(() -> {
    try {
        // 执行ping命令,-c指定发送包的数量,-i指定间隔时间(秒)
        Process process = Runtime.getRuntime().exec("ping -c 5 -i 1 www.google.com");
        
        // 获取命令的标准输出流
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        
        String line;
        // 逐行读取输出内容
        while ((line = reader.readLine()) != null) {
            final String outputLine = line;
            // 切回UI线程更新TextView
            runOnUiThread(() -> {
                textView.append(outputLine + "\n");
            });
        }
        
        // 可选:读取错误输出,处理命令执行失败的情况
        BufferedReader errorReader = new BufferedReader(
                new InputStreamReader(process.getErrorStream()));
        while ((line = errorReader.readLine()) != null) {
            final String errorLine = line;
            runOnUiThread(() -> {
                textView.append("错误: " + errorLine + "\n");
            });
        }
        
        reader.close();
        errorReader.close();
        process.waitFor();
        
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
        runOnUiThread(() -> {
            textView.append("命令执行出错: " + e.getMessage() + "\n");
        });
    }
}).start();
  • 几个要注意的点:
    • 绝对不能在主线程里做流读取这类IO操作,必须单独开线程,否则会触发ANR
    • 更新TextView必须在UI线程,这里用runOnUiThread就行,也可以用Handler或者LiveData替代
    • 不同Android设备的ping参数可能有小差异,Linux系的ping一般用-c指定次数,可根据设备调整
    • 别忘了在AndroidManifest.xml里加网络权限:<uses-permission android:name="android.permission.INTERNET" />

内容的提问来源于stack exchange,提问作者edwinloise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:54:25