0

私は開発中の Android アプリに夢中になっています。私はこのようなソケットを作っています:

Socket socket = new Socket(IPAdress, Port);

そして、アプリを新たにインストールすると、完全に正常に動作します。しかし、その後、アプリを閉じます (サーバーも閉じて、サーバーを再起動します)。電話する

socket.close();

アプリを破棄するとき(onDestroy)。アプリを再起動すると、再び接続できなくなります。キャッシュからアプリを手動で削除する必要があります。その後、再び機能します。

間違った IP アドレスを入力すると、同じことが起こります。新しいアドレスを再入力して、新しいソケットを再度作成することはできません。私はこのようにします:

socket.close();
socket = null;
Socket socket = new Socket(IPAdress, Port);

それは私にそれをさせません。新しいソケットを新しい Thread

4

2 に答える 2

0

onDestroyソケットを閉じるのに適切な場所ではありません。システムのリソースが不足している場合にのみ呼び出されます。

ソケットで何をしているのか正確にはわかりませんが、アプリケーションがユーザーに表示されなくなったときにソケットが必要ない場合は、onPauseまたはで閉じる必要がありますonStop

http://developer.android.com/reference/android/app/Activity.htmlでアプリケーションのライフサイクルを参照してください。

于 2013-03-09T16:52:20.517 に答える
0

そこで、呼び出し時にアプリがクラッシュし続ける理由を突き止めました。ソケットはキャッシュに残っているため、アプリを閉じても生き続けました。したがって、アプリを終了するときに、有効なソケットがあるかどうかを示すブール値があり、それを閉じることができます。ソケットを開くことができなかった場合は、閉じる必要はありません。

その後、再起動したら、次のようにします。

ソケット = null;

その後、新しいソケットを作成できます!

(このテキストを適切にインデントして書式設定できなくて申し訳ありません。4 つのスペースで試してみましたが、うまくいきませんでした :(

于 2013-03-12T19:55:52.020 に答える