WebView provoca el reinicio de la aplicación – Señal fatal 11 (SIGSEGV)
Tengo una actividad que muestra páginas web. En algunos teléfonos (por ejemplo, Huawei Ascend), esta actividad se bloquea de una manera que provoca que la aplicación se reinicie, pero no provoca el error habitual de error de Android para informes. Parece que siempre se bloquea mientras una página web se está cargando, pero no en un punto determinado, por ejemplo, a veces en shoulOverrideUrlLoading, a veces durante onPageStarted o onPageFinished.
Creo que el WebView está causando esto–
- Horizontal inflable de menú en el clic largo para la vista web
- Android - Cómo mostrar las direcciones en la vista web
- Android <4.3 WebView https error: Retroceder a SSLv3 porque host es TLS intolerante
- Autorizar al usuario en el sitio web de Google en WebView mediante un diálogo
- La autenticación de Dropbox deja abierto el navegador
08-29 21: 08: 22.577: A / libc (957): Señal fatal 11 (SIGSEGV) en 0x00000008 (código = 1), hilo 957
– pero no puedo entender por qué.
Aquí está la actividad:
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); } }
Y aquí está el diseño cargado:
<?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: desactivar la aceleración de hardware de esta manera
myWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Parece detener la cosa SIGSEV, pero también deja de reproducir vídeos de YouTube (todavía tengo audio, pero ninguna imagen).
- Vista Web de Android: desactive CORS
- Centro alinear el problema del marcador de posición en android
- Android - CoordinatorLayout / NestedScrollView / Hide-Show Toolbar / Problema con WebView
- Color de fondo de Android WebView
- Webview de Android y acceso a Facebook no funciona
- Aceleración de hardware WebView de Android
- Problema de redireccionamiento de Webview
- Establecer credenciales en una vista Web de Android mediante una conexión HTTPS segura
Asegúrese de que WebView es el primer elemento de RelativeLayout. O no utilice RelativeLayout, intente LinearLayout. O eliminar los atributos android: layout_alignParentTop = "true" android: layout_above = "@ id / webNavBar" de WebView
webSettings.setJavaScriptEnabled(true);
Ajustes anteriores causas "Fatal signal 11 (SIGSEGV)"
error para algunos sitios que utilizan java script. He reproducido este error en Samsung Galaxy Tab 3 y Galaxy 3 lite. La versión de Android es 4.4.2 para ambos dispositivos.
Si quito la función "setJavaScriptEnabled", está funcionando bien.
- CoordinatorLayout: Ocultando / Mostrando barra de herramientas medio visible?
- Eclipse DDMS no muestra Emulator al reiniciar