Я уже видел это несколько раз, но не могу найти упоминания об этом.В этом случае я выполняю сетевые операции, и после не разрешения хоста рабочий поток умирает, и logcat показывает следующее:
Warning System.err 8/14/2011 8:41:58 PM 4355 java.net.UnknownHostException: Unable to resolve host "q": No address associated with hostname
Warning System.err 8/14/2011 8:41:58 PM 4355 at java.net.InetAddress.lookupHostByName(InetAddress.java:496)
Warning System.err 8/14/2011 8:41:58 PM 4355 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
Warning System.err 8/14/2011 8:41:58 PM 4355 at java.net.InetAddress.getAllByName(InetAddress.java:249)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
...
Warning dalvikvm 8/14/2011 8:41:58 PM 4355 threadid=10: thread exiting with uncaught exception (group=0x4013a760)
Как вы видите, исключение записывается в поток System.err (который являетсяStderr Java, который Android фактически не использует или не поддерживает).Ничего не перехватывается:
- операторы try catch не работают, так как он находится в потоке, открытом строкой ожидаемой попытки.
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler())
тоже не работает,что просто кажется очень неправильным.
Итак, мои вопросы:
- Почему некоторые исключения ведут себя не так, как другие на уровне системы (иначе ониbypass
Thread.setDefault
)? - Как мне по-прежнему получать эти исключения, не прибегая к чтению System.err или других «хакерских» решений?
Редактировать: Android 3.1, Samsung Tab 10.1, но я почти уверен, что это не проблема устройства или ОС.