在WebView中捕获Flash内存不足错误?

时间:2011-05-20 09:20:58

标签: android webview flash sigsegv

将某些 .swf 文件加载到 WebView 时,闪存文件开始显示后一瞬间,我的应用程序因Signal 11故障而关闭。我无法看到任何异常。的 Example LogCat dump here

将相同的 .swf 文件加载到股票Android浏览器中时,会显示错误图标,而不是关闭。触摸它会弹出一个弹出窗口:“Adobe Flash;内存不足”

我的问题是:在SIGSEGV发生之前是否有任何方法可以捕获Insufficient Memory错误 - 阻止任务被终止 - 如股票浏览器所做的那样?任何帮助将不胜感激!


注意:我在Android 2.2下使用HTC版本的Flash插件进行测试,但似乎在其他非HTC设备上出现了同样的问题。我正在使用以下命令将swf文件直接加载到WebView中:

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

(启用了插件和JavaScript)。它在大多数情况下都能正常工作 - 只有少数文件会导致问题。我已经尝试了各种减少内存的建议(例如清除WebView缓存)但没有成功。

2 个答案:

答案 0 :(得分:3)

另一种解决方案可能是使用后台任务或服务来监控设备上的内存使用情况,如果系统告诉您内存不足,则终止闪存活动。

要知道您是否处于低内存状态,您可以使用此代码:

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

boolean onLowMemory = memoryInfo.lowMemory;

或者您可以使用 memoryInfo.availMem 检查可用内存,如果它太低(接近 memoryInfo.threshold )会在异常之前终止您的活动。

答案 1 :(得分:-1)

我认为即使在onPause()

中也需要处理kill

在下面的链接中,您将看到一个表格,其中包含您可以覆盖的所有活动方法。它有一个名为killable的列。这表明这种方法可以被杀死。由于onDestroy()是一种可计算方法,因此可能无法调用它。但是onPause()是不可杀的,所以你可以处理你在这里保存状态或其他任何东西的逻辑。 Activity