有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 安卓应用程序在收到1或2条消息后崩溃

我正在尝试用C#中的客户端socket与服务器socket通信,我使用字节数组发送和接收消息。首先,消息的长度通过字节数组发送,然后通过字节数组发送实际消息,在接收端也是如此

但我的应用程序在收到1或2条消息后崩溃,显示异常“未能分配1936942432字节分配,1678239个可用字节和510MB,直到OOM,目标内存占用3356479,增长限制536870912”,即使我在收到数据后释放字节。问题是什么?我怎样才能克服这个问题

这是我的接收代码:

              DataInputStream dist;
              final InputStream in = s.getInputStream();
              dist = new DataInputStream(in);
              final byte[] readMsgLen = new byte[4];
              dist .read(readMsgLen,0,4);
              final int length = byteArrayToInt(readMsgLen); 
              // byteArrayToInt is a function that converts byte array to int
              data = new byte[length];
              mn.runOnUiThread(new Runnable() {
                  public void run() {
                      Toast.makeText(mn, "Message Length : "+length , Toast.LENGTH_LONG).show();
                   }
              });
              dist.readFully(data,0,data.length);
              final String msg =new String(data);
              if(msg.compareTo("Executed Successfully!") == 0){
                  mn.runOnUiThread(new Runnable() {
                       public void run() {
                          Toast.makeText(mn, "Message: "+msg , Toast.LENGTH_LONG).show();
                          Arrays.fill(readMsgLen,(byte)0);
                          Arrays.fill(data,(byte)0);
                      }
                  });
              }
              else {
                 Intent i = new Intent(mn, imageViewer.class);
                 i.putExtra("Data", msg);
                 Arrays.fill(readMsgLen,(byte)0);
                 Arrays.fill(data,(byte)0);
                 mn.startActivity(i);
              }

共 (0) 个答案