Системный сбой при переопределении долженInterceptRequest в WebViewClient

Цель:

Переопределите все запросы, сделанные WebView, и сделайте запрос сам (в конечном итоге настройте прокси).

Код:

@Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url == null || url.trim().equals("")) return null; final DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.getConnectionManager().closeExpiredConnections(); final HttpUriRequest httpRequest = new HttpGet(url); try { final HttpResponse response = httpClient.execute(httpRequest); final Header[] headers = response.getHeaders(CONTENT_TYPE); String mimeType = ""; String encoding = ""; if (headers != null && headers.length > 0) { final String type = headers[0].getValue(); final int semicolonIndex = type.indexOf(';'); if (semicolonIndex != -1) { mimeType = type.substring(0, semicolonIndex).trim(); encoding = type.substring(semicolonIndex + 1).trim(); final int equalsIndex = encoding.indexOf('='); if (equalsIndex != -1) encoding = encoding.substring(equalsIndex + 1).trim(); } else mimeType = type; } return new WebResourceResponse(mimeType, encoding, response.getEntity().getContent()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } finally { httpClient.getConnectionManager().closeExpiredConnections(); } return null; } 

Запросы все, кажется, проходят очень хорошо, но в итоге я получаю трассировку стека с одной из следующих проблем:

 3 15:07:28.650 E/InputDispatcher( 3981): channel '40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8 01-03 15:07:28.650 E/InputDispatcher( 3981): channel '40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 

Что, по-видимому, указывает на то, что в операционной системе заканчиваются файловые дескрипторы (fid)

или

 01-03 15:29:36.810 I/DEBUG ( 5798): 5903cd34 ac81c0b7 /system/lib/libdvm.so 01-03 15:29:38.380 I/DEBUG ( 5798): debuggerd committing suicide to free the zombie! 01-03 15:29:38.380 I/BootReceiver( 3981): Copying /data/tombstones/tombstone_07 to DropBox 

(SYSTEM_TOMBSTONE)

Это означает, что я считаю, что ОС работает в проблемах с низким уровнем.

Я использую 3.0 +, поэтому функция должна поддерживаться.

В основном это происходит, когда я включаю javascript или просматриваю какое-то время без javascript.

У меня есть только один комментарий, я вижу, что в начале вы возвращаете значение null, если URL-адрес равен null или пустой или просто пробелы, но в документации вы можете прочитать «Возвращает A WebResourceResponse, содержащий информацию об ответе, или null, если WebView должен загружать Самого ресурса ». Так что если это то, что вы хотите, вперед, если бы я не рекомендовал super.shouldInterceptRequest (view, ""), причина в том, что нулевой URL может вызвать некоторые проблемы.

Intereting Posts
Почему отчет по Android Studio «URI не зарегистрирован»? Android самый быстрый способ декодировать mp3 в pcm данные Неустранимая исключение, брошенное на Scheduler.Worker thread с Retrofit 2 и Rx Как получить доступ к ресурсам по ID в тесте Android? Android: как отменить запрос обновления местоположения с намерением? PhotoViewAttacher очищает границы изображения и масштабирования Как они внедряют систему вознаграждения в приложениях / играх? Как хранить журналы в txt-файле с помощью android.util.log Как добавить подключение к приложениям в Phonebook / Contacts, как Whatsapp и Viber? Android: как получить список всех предпочтений xml для моего приложения и прочитать их? Включить домашнюю кнопку ActionbarSherlock, Sherlockfragment Заголовок RecyclerView под элементами в Android Какова функциональность «android.intent.category.MONKEY»? Виджеты, отсутствующие в графической палитре макета (андроид на затмении) Как подключить два действия