2011-03-20 24 views
15

Recibo señales SIGSEGV cuando intento cargar HTML en un WebView con complementos flash integrados (principalmente youtube) con loadDataWithBaseURL con PluginState configurado en PluginState.ON. Puedo reproducir el error con un caso de prueba simple. Véase el siguiente código:SIGSEGV cargando HTML + Flash en un WebView

package ians.android2; 

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebSettings; 

public class TestAndroid extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    WebView wv = (WebView)findViewById(R.id.webview); 
    wv.getSettings().setPluginState(WebSettings.PluginState.ON); 

    String html = ""; 
    html += "<object width=\"620\" height=\"376\">"; 
    html += "<param name=\"movie\" value=\"http://www.youtube.com/v/C4KdcRHoXOA?fs=1&amp;hl=en_US&amp;rel=0\"></param>"; 
    html += "<param name=\"allowFullScreen\" value=\"true\"></param>"; 
    html += "<param name=\"allowscriptaccess\" value=\"always\"></param>"; 
    html += "<embed src=\"http://www.youtube.com/v/C4KdcRHoXOA?fs=1&amp;hl=en_US&amp;rel=0\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"620\" height=\"376\"></embed>"; 
    html += "</object>"; 

    wv.loadDataWithBaseURL("notreal/", html, "text/html", "utf-8", null); 
    } 
} 
+0

Esto es en un HTC Desire HD usando el último firmware basado en 2.2.1. Stock ROM, sin cosas personalizadas. – Ian

Respuesta

5

señales SIGSEGV o fallos de segmentación se producen cuando un proceso intenta hacer referencia a la memoria fuera de los segmentos de memoria que han sido asignados al proceso. Esto evita que los procesos corrompan otros procesos que se ejecutan en el teléfono y, de hecho, el propio Android.

Sin intentar reproducir el problema yo mismo, sugeriría que su código posiblemente haya expuesto un defecto en la Dalvik JVM que se ejecuta en el HTC.

Una de las cosas buenas de las fallas de segmentación es que debería poder obtener un archivo de núcleo que describa el estado del proceso en la memoria cuando ocurrió el error.

Los archivos principales son legibles por el depurador de GNU gdb y darán el seguimiento de la pila de llamadas hasta el punto donde se produjo el error de segmentación. Entonces, si pudiera encontrar un archivo core correspondiente, sería útil enviarlo junto con una solicitud de error a los desarrolladores de Android. Un poco de investigación debería revelar si puede o no obtener el archivo central de un bloqueo de proceso en un HTC.

Desde el punto de vista de hacer que su código funcione Propongo probar HTML menos complejo para ver si eso funciona y luego agregar incrementalmente el html que necesita para ver si un cambio específico en HTML expone el defecto. Esto sería útil para los desarrolladores de Android en cualquier informe de error que les hayas enviado.

+0

¿Puede la falla de segmentación hacer que mi aplicación fuerce a gritar y reiniciar (sin lanzar una excepción ...)? –

+1

Un error de segmentación solo causará el cierre de una aplicación. –

+0

gracias. eso es lo que quería saber –