2011-03-20 12 views
15

Otrzymuję sygnały SIGSEGV, gdy próbuję załadować HTML do WebView z osadzonymi wtyczkami flash (głównie youtube) z loadDataWithBaseURL z ustawieniem PluginState na PluginState.ON. Jestem w stanie odtworzyć błąd za pomocą prostego przypadku testowego. Patrz następujące kod:SIGSEGV ładowanie HTML + Flash do 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

Jest to w telefonie HTC Desire HD przy użyciu najnowszego oprogramowania układowego opartego na wersji 2.2.1. Stock ROM, bez niestandardowych rzeczy. – Ian

Odpowiedz

5

sygnały SIGSEGV lub błędów segmentacji wystąpić podczas procesu próby odniesienia pamięci zewnątrz segmenty pamięci, które zostały rozdzielone w procesie. Zapobiega to korupcji procesów innych procesów działających w telefonie, a nawet sam Android.

Nie próbując odtworzyć problemu samodzielnie sugerowałbym, że twój kod prawdopodobnie ujawnił wadę w maszynie JVM Dalvik działającej na HTC.

Jedną z najfajniejszych rzeczy o usterkach segmentacji jest to, że powinieneś być w stanie uzyskać plik core, który opisuje stan procesu w pamięci, kiedy wystąpił błąd.

Pliki core są odczytywane przez GND Debugger GDB i będą podawać ślad stosu wywołania aż do punktu, w którym wystąpił błąd segmentacji. Jeśli więc można znaleźć odpowiedni plik główny, to byłoby to przydatne, aby przesłać wraz z zapytaniem o błąd programistów Androida. Trochę badań powinno ujawnić, czy możesz pobrać plik core z awarii procesu w HTC.

Z punktu widzenia poprawnego działania kodu sugeruję wypróbowanie mniej skomplikowanego kodu HTML, aby sprawdzić, czy to działa, a następnie przyrostowo dodawać html, który jest potrzebny do sprawdzenia, czy określona zmiana w kodzie HTML ujawnia wadę. Byłoby to przydatne dla programistów Androida w każdym zgłoszonym do nich zgłoszeniu błędu.

+0

Czy błąd segmentacji może spowodować, że moja aplikacja wymusi wykrzyczenie i restart (bez odrzucania wyjątku ..)? –

+1

Błąd segmentacji spowoduje tylko zamknięcie aplikacji. –

+0

dziękuję. to właśnie chciałem wiedzieć –

Powiązane problemy