2010-07-20 6 views
8

배경 프로세스를 사용하여 정기적으로 (예 : 매시간) 웹의 콘텐츠 소스에 연결하여 업데이트 된 콘텐츠를 확인하는 Android 코드가 있습니다. 새로운 사용자가 앱을 다운로드하여 처음 실행하면 처음 실행되는 상황에서 서버의 DNS가 이미 기기에 캐시되어 있지 않기 때문에 처음에는 앱을 다운로드하고 실행하는 것처럼 보입니다. 이러한 첫 번째 일련의 연결은 두려운 UnknownHostException으로 실패합니다 : 호스트가 확인되지 않았습니다. 물론 응용 프로그램이 나중에 다시 시도하고 (다시 말하면 "좋아"라고 표시됩니다) 모두 작동합니다. 아마도 OS가 실제로 문제를 해결할 시간이 있었기 때문일 수 있습니다. 주소.Android java.net.UnknownHostException : 호스트가 확인되지 않음 (전략 질문)

내 질문은 다음과 같습니다. (1) 다른 Android 개발자도 배포 된 응용 프로그램에서도이 동작을 볼 수 있습니까? 처음에는 나중에 스스로 해결할 수있는 "호스트 확인되지 않은"일련의 문제가 발생했습니다. 2) 누구나 "DNS 워밍업 (warming up the DNS)"에 대한 최초의 실제 연결이 작동하도록 더 나은 전략을 가지고 있습니까? 아니면이 예외를 만났을 때 다시 백 오프 루핑을 시도하십시오. 기각? 나는 우리 서버에서 작은 텍스트 파일을 가져 오려고 시도하는 별도의 스레드를 가지고 있으며 성공할 때까지 다른 나가는 네트워크 연결을 차단할 때까지 그냥 루프를 돌릴 수 있습니다 (이 부분에 대해서는 확실하지 않음). 어떤 경우

, 나는 여기에 스택 오버플로 다양한 유사하게 표현 된 질문의 덩어리를 읽고 난 그냥

<uses-permission android:name="android.permission.INTERNET" /> 

가 내 매니페스트 파일에 설정되어 있는지 모두를 보장하기 위해 :)

+1

같은 문제가 발생했습니다. 이를 분석하기 위해 패킷을 기본 dns (8.8.8.8)로 보내는 icmp ping을 구현했습니다. 우리가 관찰 한 것은 비록 ip-ping 테스트가 성공적 이었더라도 (따라서 인터넷 연결이 가능함) 우리는 여전히 UnknownHostException을 발견했습니다. 어떤 생각이 이것의 원인 일 수 있습니까? – icyerasor

답변

14

HttpUrlConnection을 사용하는 동안이 문제가 발생했습니다. 간단한 해결 방법을 사용하고 있습니다 - 난 그냥 URL을 사용하기 전에 다음 코드를 실행합니다. URL의 내가 여기에 얻을 처음

try { 
     InetAddress i = InetAddress.getByName(URLName); 
    } catch (UnknownHostException e1) { 
     e1.printStackTrace(); 
    } 
// ... actually using URLName 

UnknownHostException의하지만 다음의 용도는 (DNS 서버가 올바른 IP 주소를 반환하고 내가 서버에 연결할 수) 성공.

+0

아주 흥미로운 아이디어, 바트. 기록을 위해 우리는 HttpUrlConnection을 사용하고 있습니다. 감사! 나는 우리가 예외의 수가 줄어든지를보기 위해 그것을 시도하고 감시 할 것이다. – sorens

+0

지난 밤에 Google 검색 API를 사용하여 동일한 문제가 발생했습니다 ... 호스트를 찾을 수없는 호스트가 계속되었습니다 ... 그 원인은 무엇입니까? – androidworkz

+0

이 문제도 발생했는데 문제가 발생했을 때 다른 사람의 정신에 입각 해 SD 카드가 없거나 BufferedInputStream (urlConnection.getInputStream())에이 확인되지 않은 호스트 오류가 발생한 로컬 저장소가 없다는 것을 듣고 싶습니다.) 전화. – sradforth

관련 문제