私のアプリケーションには、UI(Activityで実装)とサービス(IntentServiceで実装)があります。このサービスは、データをリモートサーバーに送信し(同期、NetworkStream.Writeを使用)、UIへの送信ステータスを更新するために使用されます( Broadcast Receiverメソッドを使用して実装されます)。
これが私の問題です:
NetworkStream.Writeに使用されるバッファーのサイズが11KB以下の場合、アプリケーションは正しく機能します。
ただし、バッファのサイズが11 KBより大きい場合、たとえば20 KB(jpg画像を送信するために必要なこのサイズ)の場合、サービスは正常に機能し続けます(ログファイルで確認されます)が、UIはなくなります(デバイスの戻るボタンが押された場合)、デバイスを元に戻す方法が見つかりません。この場合、アクティビティはOnStop()またはOnDestroy()状態にならないことを指摘することが重要です。
最初は、これはサーバーの遅延によるApplicationNotResponding関連の問題だと思いましたが、約5秒後にUIがクラッシュします。
さらに、これはハードウェアバージョンでのみ発生します。エミュレータバージョンは正常に動作します。
// 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();