2016-10-10 4 views
1

アクティビティに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. 
+0

あなたは読み取りタイムアウトを設定し、それが引き金場合に生じる 'SocketTimeoutException'を処理する必要があります。ケーブル引っ張りを検出するためにソケットから読み取っているコードのための他の方法はありません。 – EJP

+0

ほとんどの場合、この例外はトラフルを通過しますが、それはすべて正常ですが、フリーズすることはありませんが、単に渡されず、何も印刷されません(フレームのスキップを除く)。メインの投稿に追加した別のログを確認してください。例外ブロックを通過しなかったものです(時間のずれを確認してください - それがフリーズです)。 Btw、どのようにInputStreamのタイムアウトを設定するのですか? Socket only AFAIKでは可能です。私はInputStreamの代わりにSocketsを使うべきですか?ありがとう。 – BlackJack

+0

「この例外を通る」とか実際には何を意味するのか分かりませんが、別にそれをキャッチしないと、別々に処理することはできません。 – EJP

答えて

-1

Javaでスレッドを生成するために悪い習慣です。特にAndroidで。これをより良い方法で処理するスレッドプールがあります。あなたのケースの使用AsyncTaskで

AsyncTask.execute(new Runnable() { 
    @Override 
    public void run() { 
     try 
     { 
      InputStream input = new URL(url).openStream(); 
      ... 

     } catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}); 
+0

が試行されましたが、時には凍っています。 – BlackJack

+0

あなたの意見は答えではなく、あなたは実際の質問に対処していません。 – EJP

関連する問題