2013-08-29 11 views
10

ich eine Aktivität haben, die Web-Seiten anzeigt. Auf einigen Telefonen (z. B. Huawei Ascend) stürzt diese Aktivität auf eine Weise ab, die den Neustart der Anwendung verursacht, aber nicht das übliche android-Fehler-Popup für die Berichterstellung verursacht. (Andere Telefone (z. B. Nexus) stürzen niemals ab.) Es scheint, dass es immer abstürzt, während eine Webseite geladen wird, aber nicht an einem bestimmten Punkt, z. manchmal bei shoulOverrideUrlLoading, manchmal während onPageStarted oder onPageFinished.WebView verursacht Neustart der Anwendung - Fatal Signal 11 (SIGSEGV)

denke ich, die WebView verursacht this--

08-29 21: 08: 22,577: A/libc (957): Fatal Signal 11 (SIGSEGV) bei 0x00000008 (code = 1), 957 Gewinde

--Aber kann ich nicht herausfinden, warum.

Hier ist die Aktivität:

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); 
    } 
} 

Und hier ist das geladene Layout:

<?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: Hardware-Beschleunigung Drehen wie dieses

myWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

off scheint das zu stoppen SIGSEV-Ding, aber stoppt auch Yo UTube Videos abspielen (Ich habe immer noch Audio, aber kein Bild).

+0

Haben Sie diese gesehen? http://stackoverflow.com/questions/14023291/fatal-signal-11-sigsegv-at-0x00000000-code-1-phonegap http://stackoverflow.com/questions/10662446/invalid-heap-address-and -Fatal-Signal-11 –

+3

@JasonCrosby - ja; leider scheint die „dies ein Fehler in der Firmware des Gerätes ist“ Antwort am ehesten um wahr zu sein (und gleichzeitig hilfreich die am wenigsten, wenn es darum geht, tatsächlich den Fehler zu verhindern, verdammt, Android Gerätehersteller!) –

+0

Lol ja seine immer frustrierend, wenn es einen Fehler gibt und man kann nicht viel dagegen tun. –

Antwort

3

sicherstellen, dass die WebView das erste Element des RelativeLayout ist. oder verwenden Sie RelativeLayout nicht, versuchen Sie einfach LinearLayout. oder die Attribute android entfernen: layout_alignParentTop = "true" android: layout_above = "@ id/webNavBar" von WebView

+7

Was ist der Grund dafür? – Jaec

0
webSettings.setJavaScriptEnabled(true); 

Einstellungen oben verursacht "Fatal signal 11 (SIGSEGV)" Fehler für einige Java-Skript-Sites. Ich reproduzierte diesen Fehler auf Samsung Galaxy Tab 3 und Galaxy Tab 3 Lite. Android-Version ist 4.4.2 für beide Geräte.

Wenn ich entfernen „setJavaScriptEnabled“ -Funktion, es funktioniert gut.

Verwandte Themen