2011-01-07 12 views
0

Wi-Fi接続が失われたときにANRメッセージが表示される問題をデバッグする途中です。アプリケーションが起動すると、Wi-Fi接続が確立されます。接続性が低下し、wi-fiから3Gへの切り替え中に、サーバからデータを取り出すことができません。私のコードでは、私は例外をキャッチし、短い睡眠期間の後にもう一度やり直します。しかし、アプリケーションはANRメッセージを表示し、クラッシュします。私の質問はどこから始めるべきかです。リードは何ですか?私はLOGCATを見ましたが、アプリケーションが特定の場所にぶら下がっているという表示はありません。これに関する専門家の意見あなたはUIスレッドでブロッキングIOを行っているので、あなたがANRを取得することができる)Wi-Fi接続が失われたときのAndroidアプリのANR

1: はところで、私の工夫は、モトドロイドAdroidは2つのことが問題になる可能性がある、私の頭の上から2.2

答えて

1

です。これはあなたが発見したように悪いことです。あなたの解決策は、すべてのブロックIOを別々のバックグラウンドスレッドで行うことです。これが直接的ではない場合でも、UIスレッドとは別のスレッドでIOを実行するのが最良の方法です。

2)ソケットがwifiインターフェイスにバインドされています。そのインターフェイスが無効になっている(つまり、接続が失われている)とき、そのソケットは役に立たない。あなたが例外をキャッチしていて、そのソケット上で別の操作をプリフォームしようとしているのであれば、別の例外がスローされます。これはあなたのアプリケーションを例外捕捉の無限ループに送ります。例外をチェックして、ネットワークインターフェイスが失われたときにソケットを適切に廃棄する必要があります。

+0

深い分析を行い、UIスレッドでhttpコールをブロックしていることがわかりました。 – prashant

関連する問題