Поймать Flash из-за ошибки памяти в WebView? - PullRequest
2 голосов
/ 20 мая 2011

При загрузке определенных файлов .swf в WebView , через доли секунды после того, как начинает отображаться флэш-файл, мое приложение закрывается с ошибкой Сигнала 11.Не исключение, которое я вижу. Пример дампа LogCat здесь .

При загрузке тех же файлов .swf в стандартный браузер Android вместо закрытия отображается значок ошибки.отображается.При прикосновении к нему открывается всплывающее окно: «Adobe Flash; Недостаточно памяти» .

Мой вопрос: есть ли способ отловить ошибку «Недостаточно памяти» до возникновения SIGSEGV - предотвращениезадача от завершения - как это делается в стоковом браузере?Любая помощь будет принята с благодарностью!


Примечание: я тестирую под Android 2.2 с версией плагина Flash для HTC, но похоже, что такие же проблемы возникают и с другими, не HTCустройства.Я загружаю SWF-файл в WebView напрямую, используя:

webView.loadUrl("http://whatever.com/bla.swf");

(с подключаемыми модулями и включенным JavaScript).В большинстве случаев работает отлично - только несколько файлов вызывают проблемы.Я пробовал различные предложения по сокращению памяти (например, очистка кэшей WebView) без успеха.

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

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

Чтобы узнать, что у вас недостаточно памяти, вы можете использовать этот код:

ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); 
activityManager.getMemoryInfo(memoryInfo);

boolean onLowMemory = memoryInfo.lowMemory;

Или вы можете проверить доступную память, используя memoryInfo.availMem , если она слишкомнизкий (близко к memoryInfo.threshold ) убивает вашу активность до исключения.

0 голосов
/ 21 мая 2011

Я думаю, вам нужно обработать уничтожение даже в onPause ()

. По ссылке ниже вы увидите таблицу всех методов в действии, которые вы можете переопределить.У него есть один столбец, который называется killable.Что указывает, могут ли эти методы быть убиты.Поскольку onDestroy () является убиваемым методом, есть вероятность, что он не может быть вызван.Но onPause () не убивает, поэтому вы можете обработать логику сохранения состояния или что-то еще здесь. Активность

...