Intereting Posts
Программная клавиатура изменяет размер фонового изображения на Android Результаты геокодирования без отображения их на карте Изменить listpreference Сводный цвет текста и размер Можно ли разрешить пользователю множественный выбор файла в инфраструктуре доступа к хранилищу.? Ошибка базовой библиотеки Android Android отправляет файл / данные из приложения через Bluetooth на ПК / принтер / сканер / другое устройство Управление onclicklistener в текстовом режиме с поддержкой autolink Android Facebook SDK: генерировать ключ ключа релиза Тестирование NEON-оптимизированного cv :: threshold () на мобильном устройстве Не удалось выполнить синхронизацию проекта Studio Studio Gradle Open failed: EBUSY (занятое устройство или ресурс) Что лучше, listview или linearlayout в scrollview, когда элементы очень ограничены? Можно ли использовать один файл ключей для подписи двух разных приложений? Android ICS 4.0 NDK NewStringUTF разрушает приложение Как обращаться с кнопкой «Назад» с помощью пейджера просмотра?

WebView вызывает перезапуск приложения – Fatal signal 11 (SIGSEGV)

У меня есть активность, которая отображает веб-страницы. На некоторых телефонах (например, Huawei Ascend) это действие аварийно завершается, что заставляет приложение перезагружаться, но не вызывает всплывающее всплывающее сообщение об ошибке для Android. (Другие телефоны (например, Nexus) никогда не сбой вообще.) Кажется, что он всегда сбой во время загрузки веб-страницы, но не в какой-либо конкретной точке, например, иногда в shoulOverrideUrlLoading, иногда во время onPageStarted или onPageFinished.

Я думаю, что WebView вызывает это –

08-29 21: 08: 22.577: A / libc (957): фатальный сигнал 11 (SIGSEGV) при 0x00000008 (код = 1), поток 957

– Но я не могу понять, почему.

Вот работа:

public class WebDisplay extends Activity { private String sentUrl = ""; public WebView myWebView; public ProgressBar spinner; @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("WEBVIEW", "onCreate"); getWindow().setBackgroundDrawableResource(R.color.white); Bundle extras = getIntent().getExtras(); if (null != extras) { sentUrl = extras.getString("displayURL"); } setContentView(R.layout.webdisplay); myWebView = (WebView) findViewById(R.id.webDisplay); spinner = (ProgressBar) findViewById(R.id.webLoading); // WebView displays default to showing things in exact pixel size at 100% // resolution, meaning it generally opens on a zoomed in portion of the // top left of the web page and refuses to let you zoom out, so we have // to force it to display pages a bit more reasonably. myWebView.getSettings().setLoadWithOverviewMode(true); myWebView.getSettings().setUseWideViewPort(true); myWebView.getSettings().setPluginState(WebSettings.PluginState.ON); // By default, there is no javascript support or zoom controls, so // turn both of those on. WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // We want links to continue opening inside the app. myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d("WEBVIEW", "loadUrl="+url); view.loadUrl(url); // open link in the same web view. return true; } @Override public void onPageStarted(WebView view, String url, android.graphics.Bitmap favicon) { Log.d("WEBVIEW", "onPageStarted="+url); super.onPageStarted(view, url, favicon); if (View.GONE == spinner.getVisibility()) { spinner.setVisibility(View.VISIBLE); } } @Override public void onPageFinished(WebView view, String url) { Log.d("WEBVIEW", "onPageFinished="+url); super.onPageFinished(view, url); if (View.VISIBLE == spinner.getVisibility()) { spinner.setVisibility(View.GONE); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String url) { Log.d("WEBVIEW", "onPageError="+url+"::descr="+description); } }); // Try to get YouTube videos working. myWebView.setWebChromeClient(new WebChromeClient() { }); // So the user doesn't have to back through their entire history to get // back to the app, we provide a "done browsing" button. Button doneButton = (Button) findViewById(R.id.doneButton); doneButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { finish(); } }); ImageButton backButton = (ImageButton) findViewById(R.id.webBackButton); backButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { myWebView.goBack(); } }); ImageButton fwdButton = (ImageButton) findViewById(R.id.webForwardButton); fwdButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { myWebView.goForward(); } }); ImageButton refreshButton = (ImageButton) findViewById(R.id.refreshButton); refreshButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { myWebView.reload(); } }); myWebView.loadUrl(sentUrl); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // Save the state of the WebView myWebView.saveState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // Restore the state of the WebView myWebView.restoreState(savedInstanceState); } } 

И вот загруженный макет:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" > <RelativeLayout android:id="@+id/webNavBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/abs__background_holo_light" android:layout_alignParentBottom="true" android:padding="2dp" > <Button android:id="@+id/doneButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/refreshButton" android:layout_alignTop="@+id/refreshButton" android:background="@drawable/custom_button" android:padding="5dp" android:text="@string/web_done" android:textColor="@color/white" android:textStyle="bold" /> <ImageButton android:id="@+id/refreshButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:background="@drawable/custom_button" android:src="@drawable/ic_action_refresh" android:contentDescription="@string/web_refresh" android:textColor="@color/white" android:padding="5dp" /> <ImageButton android:id="@+id/webBackButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginRight="5dp" android:layout_toLeftOf="@+id/webForwardButton" android:background="@drawable/custom_button" android:src="@drawable/navigation_back" android:padding="5dp" android:contentDescription="@string/web_back" android:textColor="@color/white" /> <ImageButton android:id="@+id/webForwardButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/custom_button" android:src="@drawable/navigation_forward" android:contentDescription="@string/web_forward" android:textColor="@color/white" android:padding="5dp" /> </RelativeLayout> <WebView android:id="@+id/webDisplay" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_above="@id/webNavBar" /> <ProgressBar android:id="@+id/webLoading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="80dp" style="@android:style/Widget.ProgressBar.Large" android:layout_centerHorizontal="true" /> </RelativeLayout> 

ETA: Выключение аппаратного ускорения как это

 myWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Похоже, останавливает SIGSEV, но также останавливает воспроизведение видео на YouTube (у меня все еще есть звук, но нет изображения).

Solutions Collecting From Web of "WebView вызывает перезапуск приложения – Fatal signal 11 (SIGSEGV)"

Убедитесь, что WebView является первым элементом RelativeLayout. Или не используйте RelativeLayout, просто попробуйте LinearLayout. Или удалить атрибуты android: layout_alignParentTop = "true" android: layout_above = "@ id / webNavBar" из WebView

 webSettings.setJavaScriptEnabled(true); 

Установки выше приводят к ошибке "Fatal signal 11 (SIGSEGV)" для некоторых сайтов с использованием java-скрипта. Я воспроизвел эту ошибку на вкладке Samsung Galaxy Tab 3 и Galaxy Tab 3 lite. Версия Android для обоих устройств – 4.4.2.

Если я удалю функцию setJavaScriptEnabled, она работает нормально.