个人理解,android 上的Socket,read总是阻塞的,所以好像没明白楼主的意思。
能不能描述下最终的目的,比如希望read是阻塞的吗?或者希望它挂起的目的是什么?也许对解决问题有用。(^-^)

解决方案 »

  1.   

    new Runnable(){
    @Override
    public void run() {
    try {
    Socket socket = new Socket(Proxy.NO_PROXY);
    InetSocketAddress isa=new InetSocketAddress(host,port);
    socket.connect(isa);

    //初始化socket输入输出流
    Reader reader=new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));

    Log.e("##################输入信息包读取线程###############", "PacketReader start");

    try {

    char[] buf=new char[128];
    int len=0;

    while (true) {
    Log.e("+++++++++++++++++NotificationService+++++++++++++++++++++start", "准备读取,正在阻塞...");

    len=reader.read(buf);

    Log.e("+++++++++++++++++NotificationService+++++++++++++++++++++end", "已经读取length:"+len);
    }

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

    //输入异常打断线程
    // if(pr!=null){
    // if(pr.getFlag()){
    // pr.stopSelf();
    //
    // socketManager.startReader();
    // }else{
    // pr.stopSelf();
    // }
    // }else{
    // socketManager.startReader();
    // }
    }

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

    //连接失败
    //清理原先的对象
    //进行重连
    // connectToPush();
    } catch (IOException e) {
    e.printStackTrace();

    //登录包发送异常
    //连接失败
    //清理原先的对象
    //进行重连
    // connectToPush();
    }
    }
    });
      

  2.   

    无线循环里的read方法不阻塞,执行后,不停的打印“已经读取length:-1"”
      

  3.   

    我试过,socket连接的状态是true的