6

Android java.net.UnknownHostException: Host is unresolved (strategy question)などの古い投稿から、次のコードを使用することが提案されました。

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

つまり、DNS エントリがデバイスにキャッシュされていない場合、たとえば、起動後java.net.UnknownHostException: Host、有効な DNS であっても初めて返されるということですか?

4

1 に答える 1

3

アンドロイドのバージョンによって異なります。

インターネット接続があり、アプリケーションがマニフェスト ファイルでインターネット アクセスが必要であることを宣言している場合、アドレスは問題なく解決されます。

http://developer.android.com/reference/java/net/InetAddress.html

Android 4.0 (Ice Cream Sandwich) 以前では、DNS キャッシングは両方で実行されていました。
InetAddress および C ライブラリによるもので、DNS TTL を尊重できませんでした。
正しく。以降のリリースでは、キャッシングは C ライブラリと DNS TTL によってのみ行われます。
光栄です。

したがって、要求しているアドレスがtime to liveより古くない場合、キャッシュは応答します。キャッシュにない場合、または有効期限が切れている場合、OS は DNS サーバーに移動して検索を試みます。キャッシュ要求が失敗した場合ではなく、インターネット接続が確立されていない場合、または DNS 応答がない場合にのみ、例外がスローされます。

とはいえ、古い Android 向けのアプリケーションを作成している場合、この問題は依然として頭を悩ませる可能性があります。

Android: DNSをフラッシュする

于 2012-10-13T06:42:06.463 に答える