2011-11-15 8 views
-2

私はこれを数日前から修正しようとしていますが、無駄です。各サービスは、ファイルをダウンロードする -インターネットが動作していないときにダウンロードを停止しますか?

  • サービスがキューに入れていると、彼らは時間 に1つずつ処理されているアレイ内のすべてのファイル名のサービスを開始するには:基本的に、私がやっていることはこれです私は時々、携帯電話でインターネット、特にWIFI 1が、それはページがロードされませんのでにおける対応のdoesntと、ダウンロードが停止または取得ファイルをダウンロードしていた場合< ==問題はここに

あるサーバーから25%と言うことができます。今私はいつこれがサービスを停止することができ、何日もこれをやろうとしているが、何も起こらないことを知りたい。 ファイル1: ダウンロードの進捗状況:1 1 1 1 1 1 1 2 2 2 2 2 2 2を

URL url = new URL(full_url); 
HttpURLConnection conexion = (HttpURLConnection)url.openConnection(); 
//conexion.setConnectTimeout(10000); 
conexion.connect(); 


    while ((count = input.read(data)) > 0 && lenghtOfFile > 0){ 
       total += count; 
       downloadProgress = (int)((total*100)/lenghtOfFile); 
       Log.e("downloadProgress","" + downloadProgress); 
       output.write(data, 0, count); 

    } 

これは、ファイルがダウンロードされているとき、私は通常得るものです:これは私がこれまで持っているものです3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 7 8 8 8 9 9 9 9 9 9 10 10 10 10 10 10 ... 100

ファイル2と同様のもの: ダウンロード進捗状況:1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6 7 7 7 7 7 8 8 8 9 9 9 9 9 9 10 10 10 10 10 10 10 100

およびファイル3でインターネットがダウンする(切断されていないページはロードされません) と私は次のようになります: ファイル3: 8 8 8 8 8 9 9 9 9 9 9 9(インターネットがダウンし、9時に立ち往生)

このような状況が発生したときにサービスを停止できるようにする方法を追加するにはどうすればいいですか?

私は本当に、この時間のおかげで緊急の助けが必要です!

EDIT: これは、ファイルをダウンロードしているときにインターネットが停止したときに取得するログです。あなたが見ることができるようにダウンロードは29%に行きました、そして、インターネット接続はそれがちょうどそのようにとどまる例外をスローしない何らかの方法で無応答になります!

11-16 16:18:39.769: ERROR/totaltotal(24691): 29 
11-16 16:18:39.859: ERROR/totaltotal(24691): 29 
11-16 16:18:39.869: ERROR/totaltotal(24691): 29 
11-16 16:18:39.869: ERROR/totaltotal(24691): 29 
11-16 16:18:39.879: ERROR/totaltotal(24691): 29 
11-16 16:19:04.119: DEBUG/ConnectivityService(162): reportNetworkCondition(1, 0) 
11-16 16:19:04.119: DEBUG/ConnectivityService(162): Inet connectivity change, net=1, condition=0,mActiveDefaultNetwork=1 
11-16 16:19:04.119: DEBUG/ConnectivityService(162): starting a change hold 
11-16 16:19:05.940: DEBUG/BatteryService(162): update start 
11-16 16:19:05.940: DEBUG/BatteryService(162): update start 
11-16 16:19:05.950: DEBUG/BatteryService(162): update start 
11-16 16:19:07.129: DEBUG/ConnectivityService(162): Inet hold end, net=1, condition =0, published condition =0 
11-16 16:19:07.129: DEBUG/ConnectivityService(162): no change in condition - aborting 
11-16 16:19:15.959: DEBUG/BatteryService(162): update start 
11-16 16:19:15.959: DEBUG/BatteryService(162): update start 
11-16 16:19:15.969: DEBUG/BatteryService(162): update start 
11-16 16:19:25.979: DEBUG/BatteryService(162): update start 
11-16 16:19:25.979: DEBUG/BatteryService(162): update start 
11-16 16:19:25.989: DEBUG/BatteryService(162): update start 
+0

まず、AsyncTaskまたはthreadpoolではなく、Serviceでこれを実行してもよろしいですか? IntentServiceを使用するか、自分のサービス内のスレッドを処理しますか? 100回のダウンロード100回のファイルは、私にとって妥当ではありません。 – yorkw

+0

私は自分のサービスの実装を使用しています。私はダウンロードを保持するキューを制御するThreadを持っています。それは正常に動作します、それは問題ではない、probはどのようにインターネットがアクセスできない(まだネットワークに接続されている間に)サービスを停止するかです。 – bytebiscuit

答えて

1

Line input.read(data)は、接続が失われたときにIOExceptionを発生させます。 これらの読み込み中に例外が発生していることを確認してください。

+0

はい、私は例外をキャッチしています。私が言及したように、これは接続が失われた場合ではありません。これは、デバイスがインターネットに接続されているが、Webページとhttp要求が機能しない場合です。 – bytebiscuit

1

connect()に電話する前に、connexionオブジェクトにsetReadTimeout()と電話する必要があります。これにより、基になるソケットread(...)が時間がかかりすぎると例外がスローされます。動作していないインターネットの概念に対応するタイムアウトを選択します。

仮に、「インターネットが動作していない」ことを確実に検出した場合は、別のスレッドに到達してストリームを閉じることができます。私はこれがブロックされたスレッドのブロックを解除すると思います。ただ閉じたストリームのread(...)呼び出しでブロックされています。短い停電(例えばあなたがリフトから出たときに自分自身を解決します1)と長い間1 先験的を区別することは不可能であることを念頭に置いて


ベア。

+0

私は、ThreadProgress変数の値をチェックするスレッドまたはルーチンを持つことを考えていました。もしその値が20秒と言うと同じであれば、私はインターネットが止まってサービスが終了することを知っていますが、どうすればいいのかわかりません!!! – bytebiscuit

+0

@ user967232 - 私の答えはあなたにそれを行う方法を与えます(第2段落)。 –

+0

はいストリームを閉じると、次回読み取り時にExceptionが発生する可能性があります。それで私は何かをすることができるでしょう。しかし、インターネットが機能していない場合は、どのように検出するのか分かります。 – bytebiscuit