4.0版本是好像不能在activity里直接利用socket通信,老会死机,以前的版本可以,在4.0的版本中activity的
onCreate() 里加入下面语句,可以避免死机     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
            .detectDiskReads().detectDiskWrites().detectNetwork()
            .penaltyLog().build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
            .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
            .build());

解决方案 »

  1.   

    就是不能直接在主线程你传送数据,新建一个子线程就可以了。我原来是自己有建立了一个子线程,但是new的时候弄错了,导致还跑到主线程里,后面改过来了。
      

  2.   

    请教一下楼主
    receiveBuffer = new byte[1024];DatagramSocket mSocketReceive = new DatagramSocket(PORT);
    DatagramPacket dp = new DatagramPacket(receiveBuffer, receiveBuffer.length);
    mSocketReceive.receive(dp);我在2.2和2.3上都好用,都是4.0就是接收不到数据,楼主指点指点啊
      

  3.   

    楼主,我是在新线程里用的socket,还是跟你一样的错误,求指教!
    new Thread(new Runnable() {
    @Override
    public void run() {
    // TODO Auto-generated method stub
    DatagramSocket socket = null;
    try {
    Log.i(_TAG, "Thread listen on 1300 start!");
    socket = new DatagramSocket(1300); // bind on 127.0.0.1
    byte[] buf = new byte[1514];
    DatagramPacket packet = new DatagramPacket(buf, buf.length);
    socket.setSoTimeout(100); // timeout 100ms.
    while (!check_end) {
    try {
    socket.receive(packet);
     dialog.dismiss();
    check_end = true;
    MCamView.last_network_check_success = true;
    Log.d(_TAG, "quickly check network success!!");
    } catch (InterruptedIOException iioe) {
    // it's ok. just time out. let's continue
    Log.e(_TAG, "Check: Error1: " + iioe);
    }
    }
    } catch (Exception e) {
    Log.e(_TAG, "Check: Error2: " + e);
    } finally {
    if (null != socket) {
    socket.close();
    socket = null;
    }
    Log.i(_TAG, "Thread listen on 1300 ended!");
    }
    }
    }).start();
      

  4.   

    朋友,你在子线程中操作dialog是不行的,必须在主线程中操作。
      

  5.   

    非常感谢楼上的解答,虽然这是去年的问题,已经解决,但是我看到楼上的解答感觉很惭愧,我自己解决问题的时候就该把它贴出来的。若不是xyhui83的回复,我都忘记了我提过的问题!xyhui83给我的触动很大,以后也要为大家出力,而不只是索取!
      

  6.   

    你好我还是新手,想发tcp udp  ,DatagramSocket 发送udp在main里面,发布出去,也不死机。求方法怎么弄呢