2011-03-20 51 views
15

我收到SIGSEGV信号,当我尝试加载HTML与嵌入式Flash插件(主要是YouTube)的与loadDataWithBaseURL设置为PluginState.ON的PluginState网页视图。我可以用一个简单的测试用例重现错误。请参阅以下代码:SIGSEGV加载HTML +闪光成的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

这是使用基于2.2.1的最新固件的HTC Desire HD。股票ROM,没有自定义的东西。 – Ian 2011-03-20 23:57:44

回答

5

当进程尝试引用已分配给进程的内存段之外的内存时,会发生SIGSEGV信号或分段错误。这可以防止进程破坏手机上运行的其他进程,甚至是Android本身。

没有试图自己再现问题,我建议你的代码可能暴露了在HTC上运行的Dalvik JVM的缺陷。

有关分段故障的一件很酷的事情是,您应该能够获得一个核心文件,该文件描述故障发生时内存中进程的状态。

核心文件可由GNU调试器gdb读取,并将调用堆栈跟踪发送到发生分段错误的点。所以如果你能找到一个对应的核心文件,那么将这个文件提交给Android开发者会很有用。一点研究应该揭示你是否可以从HTC的进程崩溃中获得核心文件。

但从让你的代码工作,我建议尝试不太复杂的HTML,看看是否能工程,然后逐步增加,你需要看看是否在HTML特定的变化暴露出缺陷HTML中的点。这对于Android开发人员提交给他们的任何错误报告都很有用。

+0

可以分段错误导致我的应用程序强制喊叫并重新启动(没有抛出异常..)? – 2012-10-31 05:40:06

+1

分段错误只会导致应用程序关闭。 – 2012-10-31 07:50:15

+0

谢谢。这就是我想知道的 – 2012-10-31 08:00:14