wanmaoci 2015-08-05 06:02 采纳率: 0%
浏览 1852

Android在主线程里用handler循环ping命令固定次数会出现ioexception

我做了一个ping百度的程序,使用的是handler循环。下面是循环体:
private Handler handler = new Handler();

private Runnable task = new Runnable() {
    public void run() {
        // TODO Auto-generated method stub
        handler.postDelayed(this,5000);//设置延迟时间,此处是5秒
        //需要执行的代码,pingHost是ping百度的一个类
        text.append("\n"+pingHost("www.baidu.com")+count++);
        int offset=text.getLineCount()*text.getLineHeight();
        if(offset>text.getHeight()){
            text.scrollTo(0,offset-text.getHeight());
        }
    }
};

    其中调用的pingHost是:
    public String pingHost(String str) {
    String resault = "";
    try {
        // TODO: Hardcoded for now, make it UI configurable
        Runtime runtime=Runtime.getRuntime();
        Process p = runtime.exec("ping -c 1 -w 1 " + str);
        int status = p.waitFor();
        if (status == 0) {
            //  mTextView.setText("success") ;
            resault = "success";
           } else {
            resault = "failed";
            //  mTextView.setText("fail");
        }
    } catch (IOException e) {
        resault="IOerror";//  mTextView.setText("Fail: IOException"+"\n");
    } catch (InterruptedException e) {
        resault="INTERRUPTerror";
        //exit(1);
        //  mTextView.setText("Fail: InterruptedException"+"\n");
    }
    finally {
    }

    return resault;
}
    在循环调用312次后,会在ping的时候发生ioexception,无论我简化程序体或者是简化输出的字符串,次数都是这个固定的次数,这是由于主线程阻塞吗?还是由于Linux的ping的设定原因?
  • 写回答

1条回答 默认 最新

  • ppggaak 2015-08-09 07:41
    关注

    启用线程后台Ping,应该是一个阻塞的线程,而且ping好像是不会自己停止的,这个线程会一直ping下去,主线程不会阻塞,
    ping线程会阻塞,起一个阻塞一个。一直下去,直到系统资源耗尽。
    解决的方法应该是让ping线程延时自杀,或者使用select机制。或者有别的线程来把ping线程关闭。

    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面