アクティビティにProgressBarがあり、常に回転しています。私はavaliableウェブページに接続しようとしている - は私が私の目的のURLを取得するのInputStreamしばらくの間、InputStream "lags/stuns"アプリ
InputStream input = new URL(url).openStream();
使用しています。それは正常に動作しています。 1つの状況を除いて:ロードが開始され、ロード/処理中にインターネット接続がオフになっているとき(これは正しい時間にオフにするのは簡単ではないが難しくない)、プログレスバーは回転しない'フリーズされた'。あなたは戻るボタンで終了することもできません。数秒後、3-4のようにProgressBarが再び回転していて、アプリがフリーズされていて完全に動作しています。 LogCatは、そのアプリが多くのフレームをスキップしただけを印刷します。
コード:
new Thread(new Runnable()
{
public void run()
{
try
{
InputStream input = new URL(url).openStream();
...
} catch (IOException e)
{
e.printStackTrace();
}
}
}).start();
編集:私が受け取ったWebページを読み込むためにJsoupを使用してい。だから私は上記のように
Jsoup.connect(url).get();
すぎ
が、同じ問題を試してみました...
LogCat:
は614個のフレームをスキップ!私の意見で
LOG2
10-14 17:25:16.365 26460-26460 D/libEGL: loaded /system/lib/egl/libEGL_mali.so
10-14 17:25:16.375 26460-26460 D/libEGL: loaded /system/lib/egl/libGLESv1_CM_mali.so
10-14 17:25:16.375 26460-26460 D/libEGL: loaded /system/lib/egl/libGLESv2_mali.so
10-14 17:25:16.395 26460-26460 D/OpenGLRenderer: Enabling debug mode 0
10-14 17:25:27.406 26460-26460 I/Choreographer: Skipped 603 frames! The application may be doing too much work on its main thread.
あなたは読み取りタイムアウトを設定し、それが引き金場合に生じる 'SocketTimeoutException'を処理する必要があります。ケーブル引っ張りを検出するためにソケットから読み取っているコードのための他の方法はありません。 – EJP
ほとんどの場合、この例外はトラフルを通過しますが、それはすべて正常ですが、フリーズすることはありませんが、単に渡されず、何も印刷されません(フレームのスキップを除く)。メインの投稿に追加した別のログを確認してください。例外ブロックを通過しなかったものです(時間のずれを確認してください - それがフリーズです)。 Btw、どのようにInputStreamのタイムアウトを設定するのですか? Socket only AFAIKでは可能です。私はInputStreamの代わりにSocketsを使うべきですか?ありがとう。 – BlackJack
「この例外を通る」とか実際には何を意味するのか分かりませんが、別にそれをキャッチしないと、別々に処理することはできません。 – EJP