我的应用程序有一个 UI(用Activity实现)和一个服务(用IntentService实现)。该服务用于将数据(同步,使用NetworkStream.Write)发送到远程服务器以及将传输状态更新到 UI(使用广播接收器方法实现)。
这是我的问题:
如果用于 NetworkStream.Write 的缓冲区大小为 11 KB 或更小,则应用程序可以正常工作。
但是,如果缓冲区的大小大于 11 KB,例如 20 KB(发送 jpg 图像需要此大小),则服务会继续正常工作(通过日志文件验证),但 UI 消失了(类似于如果按下设备的后退按钮)并且我找不到将其恢复的方法。重要的是要指出,在这种情况下,Activity 不会进入OnStop()或OnDestroy()状态。
起初我认为这是由于服务器延迟导致的一些与ApplicationNotResponding相关的问题,但 UI 在大约 5 秒后崩溃。
此外,这只发生在硬件版本上。模拟器版本运行良好。
// SEND STREAM: Byte[] outStream = new Byte[20000]; // -- Set up TCP connection: -- TcpClient ClientSock = new TcpClient(); ClientSock.Connect("myserver.com", 5555); NetworkStream serverStream = ClientSock.GetStream(); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); // . . . // RECEIVE STREAM: inStream.Initialize(); // Clears any previous value. int nBytesRead = 0; nBytesRead = serverStream.Read(inStream, 0, 1024); // -- Closing communications socket: -- ClientSock.Close();