SIGSEGV загружает HTML + Flash в WebView - PullRequest
15 голосов
/ 21 марта 2011

Я получаю сигналы SIGSEGV, когда пытаюсь загрузить HTML в WebView со встроенными флеш-плагинами (в основном youtube) с loadDataWithBaseURL с PluginState, установленным в PluginState.ON.Я могу воспроизвести ошибку с помощью простого контрольного примера.Смотрите следующий код:

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

1 Ответ

5 голосов
/ 01 апреля 2011

Сигналы SIGSEGV или ошибки сегментации возникают, когда процесс пытается ссылаться на память вне сегментов памяти, которые были выделены для процесса.Это не позволяет процессам повредить другие процессы, запущенные на телефоне, и даже сам Android.

Не пытаясь воспроизвести проблему самостоятельно, я бы предположил, что ваш код, возможно, обнаружил дефект в JVM Dalvik, работающей на HTC.

Одна из замечательных вещей, связанных с ошибками сегментации, заключается в том, что вы должны иметь возможность получить файл ядра, который описывает состояние процесса в памяти на момент возникновения ошибки.

Основные файлы доступны для чтения отладчиком GNU GDB и будут обеспечивать трассировку стека вызовов до точки, где произошла ошибка сегментации.Так что, если бы вы могли найти соответствующий файл ядра, было бы полезно отправить его вместе с запросом об ошибке разработчикам Android.Небольшое исследование должно выяснить, можете ли вы получить основной файл в результате сбоя процесса на HTC.

С точки зрения получения вашего кода, я предлагаю попробовать менее сложный HTML, чтобы увидеть, работает ли он изатем постепенно добавляя HTML, который вам требуется, чтобы увидеть, если конкретное изменение в HTML выявляет дефект.Это было бы полезно для разработчиков Android в любом сообщении об ошибке, которое вы им отправили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...