【问题标题】:Catch Flash out-of-memory error in WebView?在 WebView 中捕获 Flash 内存不足错误?
【发布时间】:2011-05-20 09:20:58
【问题描述】:

在将某些 .swf 文件加载到 WebView 时,在 flash 文件开始显示后的一瞬间,我的应用程序因 Signal 11 故障而关闭。没有抛出我可以看到的异常。 Example LogCat dump here

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

我的问题是:有没有办法在 SIGSEGV 发生之前捕获内存不足错误——防止任务被终止——就像股票浏览器所做的那样?任何帮助将不胜感激!


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

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

(启用插件和 JavaScript)。它在大多数情况下都能完美运行——只有少数文件会导致问题。我尝试了各种减少内存的建议(例如清除 WebView 缓存),但均未成功。

【问题讨论】:

  • 在此处添加了相关问题:stackoverflow.com/questions/6185407/…。虽然它是关于同一个基本问题,但它是一个单独的问题,因为这个问题主要基于一个错误的前提(感谢 Adob​​e 的误导性错误消息)。

标签: android webview flash segmentation-fault


【解决方案1】:

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

要知道您是否内存不足,您可以使用以下代码:

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

boolean onLowMemory = memoryInfo.lowMemory;

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

【讨论】:

  • 谢谢!假设没有更简单的解决方案(从缺乏响应来看,这似乎很有可能),听起来它可以工作!就我所知,我想有理由使用单独的任务或服务而不是线程来执行此操作?
  • 推荐的方法是使用 AsyncTask developer.android.com/reference/android/os/AsyncTask.html 如果你使用一个线程并且 onDestroy 被调用,你会丢失对你活动中线程的引用,尽管你可以用 onRetainNonConfigurationInstance() 保存它并检索它与 getLastNonConfigurationInstance().
  • 好的,再次感谢!反正这更容易。知道检查之间可以使用什么样的间隔吗?我猜他们需要非常频繁才能确保他们发现问题。
  • 我希望内存或多或少随时间线性增加,因此另一种可能性是通过在短时间内监视任务来计算启动任务时内存使用量增加了多少,然后预测什么时候可用内存会过低。您的解决方案也应该有效并且可能更容易,我想您必须进行一些实验来调整间隔,但我会经常这样做。
  • 好的,再次感谢。不幸的是,我不确定 Flash 是否总是以恒定的速率将内容加载到内存中。例如,在一个文件中,直到视频播放到一半才会出现故障,因此它可能会因所使用的文件而有很大差异。
【解决方案2】:

我认为即使在 onPause() 中你也需要处理杀戮

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

【讨论】:

  • 谢谢。但是,我刚刚检查过,在这种情况下,六次尝试中的五次都没有调用 OnPause()。另外,我想做的是完全阻止终止,就像股票网络浏览器所做的那样。
猜你喜欢
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
相关资源
最近更新 更多