मेरे पास एक ऐसी गतिविधि है जो वेब पेज प्रदर्शित करती है। कुछ फोनों पर (उदाहरण के लिए, Huawei Ascend), यह गतिविधि इस तरह से दुर्घटनाग्रस्त हो जाती है जो एप्लिकेशन को पुनरारंभ करने का कारण बनती है, लेकिन रिपोर्टिंग के लिए सामान्य एंड्रॉइड त्रुटि पॉपअप का कारण नहीं बनती है। (अन्य फोन (जैसे नेक्सस) कभी भी क्रैश नहीं होते हैं।) यह वेब पेज लोड होने पर हमेशा क्रैश होता प्रतीत होता है, लेकिन किसी भी विशेष बिंदु पर नहीं। कभी-कभी shoulOverrideUrlLoading पर, कभी-कभी पेज पर शुरू या ऑन पेज के दौरान।वेबव्यू एप्लिकेशन को पुनरारंभ करने का कारण बनता है - घातक सिग्नल 11 (एसआईजीएसईजीवी)
मुझे लगता है कि WebView this--
08-29 21 खड़ी कर रहा है: 0x00000008 (कोड = 1), धागा 957 पर घातक संकेत 11 (SIGSEGV): 08: 22.577: ए/libc (957)
- लेकिन मैं क्यों काम नहीं कर सकता।
यहाँ गतिविधि है:
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);
}
}
और यहाँ भरी हुई लेआउट है:
<?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>
अनुमानित समय इस
myWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
की तरह हार्डवेयर त्वरण बंद करने से रोकने के लिए लगता है SIGSEV बात, लेकिन यो भी रोकता है यूट्यूब वीडियो खेल रहा है (मेरे पास अभी भी ऑडियो है, लेकिन कोई छवि नहीं है)।
क्या आपने इन्हें देखा है? http://stackoverflow.com/questions/14023291/fatal-signal-11-sigsegv-at-0x00000000-code-1-phonegap http://stackoverflow.com/questions/10662446/invalid-heap-address-and -फॉल्ट-सिग्नल -11 –
@ जेसनक्रॉस्बी - हाँ; अफसोस की बात है, "यह डिवाइस के फर्मवेयर में एक बग है" उत्तर लगता है कि वास्तव में सत्य होने की संभावना है (और वास्तव में त्रुटि को रोकने की बात आने पर कम से कम सहायक होता है; अरे, एंड्रॉइड डिवाइस निर्माता!) –
लॉल हाँ जब कोई बग होता है तो हमेशा निराशा होती है और आप इसके बारे में ज्यादा कुछ नहीं कर सकते हैं। –