2011-03-20 32 views
15

Tôi nhận được tín hiệu SIGSEGV khi tôi cố gắng tải HTML vào một WebView với các plugin flash nhúng (chủ yếu là youtube) với loadDataWithBaseURL với PluginState được đặt thành PluginState.ON. Tôi có thể tạo lại lỗi với một trường hợp thử nghiệm đơn giản. Xem mã sau:SIGSEGV tải HTML + Flash vào một 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

Đây là trên HTC Desire HD sử dụng firmware mới nhất dựa trên 2.2.1. Stock ROM, không có công cụ tùy chỉnh. – Ian

Trả lời

5

Tín hiệu SIGSEGV hoặc lỗi phân đoạn Xảy ra khi quá trình tìm cách tham chiếu bộ nhớ ngoài phân đoạn bộ nhớ đã được cấp cho quy trình. Điều này ngăn cản các quá trình làm hỏng các quá trình khác đang chạy trên điện thoại và thực sự là chính Android.

Không cố gắng tự mình tái tạo sự cố, tôi khuyên bạn nên mã của bạn có thể đã tiếp xúc với lỗi trong Dalvik JVM đang chạy trên HTC.

Một trong những điều tuyệt vời về phân đoạn Lỗi là bạn sẽ có thể lấy tệp lõi mô tả trạng thái của quá trình trong bộ nhớ khi lỗi xảy ra.

Tệp lõi có thể đọc được bởi trình gỡ rối GNU gdb và sẽ cho phép theo dõi ngăn xếp cuộc gọi đến điểm xảy ra lỗi phân đoạn. Vì vậy, nếu bạn có thể tìm thấy một tệp lõi tương ứng thì điều đó sẽ hữu ích khi gửi cùng với yêu cầu về lỗi cho các nhà phát triển Android. Một chút nghiên cứu sẽ tiết lộ liệu bạn có thể lấy tệp lõi từ một sự cố quá trình trên HTC hay không.

Từ quan điểm làm cho mã của bạn hoạt động, tôi khuyên bạn nên thử HTML ít phức tạp hơn để xem có hoạt động hay không và sau đó thêm html mà bạn yêu cầu xem có thay đổi cụ thể nào trong HTML không. Điều này sẽ hữu ích cho các nhà phát triển Android trong bất kỳ báo cáo lỗi nào mà bạn đã gửi cho họ.

+0

có thể Phân đoạn Lỗi khiến ứng dụng của tôi buộc phải tắt tiếng và khởi động lại (mà không ném ngoại lệ ..)? –

+1

Lỗi phân đoạn sẽ chỉ khiến ứng dụng bị tắt. –

+0

cảm ơn bạn. đó là điều tôi muốn biết –

Các vấn đề liên quan