2011-11-15 2 views
-2

나는 이것을 며칠 동안 고치려고했지만 아무 소용이 없다. 각 서비스는 파일을 다운로드 -인터넷이 작동하지 않을 때 다운로드를 중지 하시겠습니까?

  • 서비스가 큐에 배치하고 그들이 한 번 에 하나씩 처리됩니다 배열에있는 모든 파일 이름에 대한 서비스 시작이 : 기본적으로 무엇을 내가 뭘하면이있다 나는 휴대 전화에있는 파일을 가끔 인터넷을 다운로드하고있어 특히 WIFI 하나는 페이지가로드되지 않음에 응답 나던 다운로드가 멈추거나지면 서버에서 < == 문제는 여기

입니다 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 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 9 10 10 10 10 10 10 ... 100

다음 파일 2와 비슷한 내용 : 다운로드 진행률 : 1 1 1 1 1 1 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시에 멈춤)

서비스가 중단 될 수있는 시간을 확인하는 방법을 추가하려면 어떻게해야합니까?

정말 긴급한 도움이 필요합니다. 시간 내 주셔서 감사합니다.

편집 : 파일을 다운로드하는 동안 인터넷이 멈추었을 때 나타나는 로그입니다. 당신이 볼 수있는 다운로드가 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

나는 내 자신의 서비스 구현을 사용하고 있습니다. 다운로드를 보유하고있는 대기열을 제어하는 ​​스레드가 있습니다. 그것은 잘 작동, 그게 문제가 아니에요, prob는 인터넷에 액세스 할 수 없을 때 (네트워크에 연결되어있는 동안) 서비스를 중지하는 방법입니다. – bytebiscuit

답변

1

연결이 끊어졌을 때 input.read (data)가 IOException을 발생시킵니다. 이러한 읽기를 수행하는 동안 예외가 발생했는지 확인하십시오.

+0

예, 예외를 잡으려고합니다. 언급했듯이 연결이 끊어진 경우가 아닙니다. 장치가 인터넷에 연결되어 있지만 웹 페이지 및 http 요청이 작동하지 않는 경우입니다. – bytebiscuit

1

connect()으로 전화하기 전에 수행해야 할 작업은 connexion 개체에서 setReadTimeout()으로 전화하십시오. 이로 인해 기본 소켓 read(...)이 너무 오래 걸리면 예외가 발생합니다. 작동하지 않는 인터넷 개념에 해당하는 시간 제한을 선택하십시오.

"인터넷이 작동하지 않음"을 신뢰할 수있는 방법으로 발견 한 경우 다른 스레드가 스트림에 도달하여 스트림을 닫을 수 있습니다. 나는 방금 폐쇄 된 스트림에서 read(...) 호출에서 차단 된 스레드의 차단을 해제한다고 생각합니다.이 짧은 정전 (예를 들어, 당신은 리프트 나갈 때 스스로 해결할 일) 긴 하나 사이에 사전를 구별하기 불가능하다는 것을 염두에


곰.

+0

나는 ThreadProgress 변수의 값을 검사하는 루틴이나 루틴을 가지고 있다고 생각했다. 만약 그 값이 20 초라고 가정하면 같은 값을 유지한다면 인터넷이 멈추고 서비스가 끝난다는 것을 알지만 어떻게해야 할 지 모르겠다 !!! – bytebiscuit

+0

@ user967232 - 내 대답은 그 방법을 제공합니다 (두 번째 단락). –

+0

예 스트림을 닫으면 다음 번에 읽기가 실행되는 예외가 발생합니다. 맞습니까? 그렇게해서 나는 뭔가를 할 수있게 될 것입니다. 그러나 인터넷이 작동하지 않는 경우 어떻게 감지합니까? – bytebiscuit

관련 문제