2011-03-20 13 views
15

Ricevo segnali SIGSEGV quando provo a caricare HTML in una WebView con plug-in Flash incorporati (principalmente youtube) con loadDataWithBaseURL con PluginState impostato su PluginState.ON. Sono in grado di riprodurre l'errore con un semplice caso di test. Vedere il codice seguente:SIGSEGV che carica HTML + Flash in una 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

Si tratta di un HTC Desire HD che utilizza il firmware più recente basato su 2.2.1. Stock ROM, nessuna roba personalizzata. L'errore di segmentazione – Ian

risposta

5

segnali SIGSEGV o segmentation faults si verificano quando un processo tenta di fare riferimento memoria fuori dei segmenti di memoria che sono stati assegnati al processo. Ciò impedisce ai processi di danneggiare altri processi in esecuzione sul telefono e in effetti su Android stesso.

Senza tentare di riprodurre il problema io stesso vorrei suggerire che il codice è probabilmente esposto un difetto nella Dalvik JVM in esecuzione sul HTC.

Uno degli aspetti positivi di Segmentation Faults è che dovresti essere in grado di ottenere un file core che descrive lo stato del processo in memoria quando si è verificato l'errore.

I file principali sono leggibili dal debugger GNU gdb e forniranno la traccia dello stack di chiamata fino al punto in cui si è verificato l'errore di segmentazione. Quindi, se si riuscisse a trovare un file core corrispondente, sarebbe utile inviarlo insieme a una richiesta di bug agli sviluppatori Android. Un po 'di ricerca dovrebbe rivelare se è possibile ottenere il file principale da un crash di processo su un HTC.

Dal punto di vista del funzionamento del codice suggerisco di provare un HTML meno complesso per vedere se funziona e quindi aggiungere in modo incrementale l'html necessario per vedere se una specifica modifica in HTML espone il difetto. Questo sarebbe utile per gli sviluppatori Android in qualsiasi segnalazione di bug che hai inviato a loro.

+0

può causare la mia applicazione per forzare il richiamo e il riavvio (senza generare eccezioni ..)? –

+1

Un errore di segmentazione causerà l'arresto di un'applicazione. –

+0

grazie. questo è quello che volevo sapere –

Problemi correlati