【问题标题】:Out Of Memory exception in Xamarin.Forms - AndroidXamarin.Forms 中的内存不足异常 - Android
【发布时间】:2014-09-30 22:31:49
【问题描述】:

我开发的应用程序是一个调查应用程序。我的应用程序的导航类似于这个Page1 --> Page2 --> Page3 --> Page4 --> Page1。从一个页面导航到另一个页面时,每次都会占用堆空间,导致OOM异常。

我试过了

  • 每个页面的 OnDisappearing() 中的 GC.Collect() 没有帮助

  • 在 MainActivity 中使用了重写 OnLowMemory()。

    public override void OnLowMemory() 
    {
      GC.Collect ();
    }
    
  • 已删除高分辨率图像。

我在 using 块中也将位图用于按钮渲染器,除此之外我没有在其他任何地方使用位图。

如何减少堆空间使用量的增长?我找不到释放堆空间的方法。它不断增加导致OOM异常。 I have asked a similar question here

谁能指出一些有用的方向来克服这个问题?

【问题讨论】:

    标签: xamarin.android xamarin.forms


    【解决方案1】:

    问题是表单将页面实例保存在导航堆栈的内存中。 当导航到下一页时,我会尽可能多地处理资源(好吧,图像可能是最大的内存消耗),并在页面再次成为焦点时恢复它们。 垃圾收集器无济于事,因为所有内容仍被引用。

    也就是说,我认为导航做得不够好。您可以做的一件事是投出您的 uservoice 并希望 Xamarin 最终会改进它。

    更新:我错过了 OP 将在最后进入根页面,因此如果用户继续向前导航,此答案将适用。

    【讨论】:

    • 不会this.Navigation.PopModalAsync () 删除已创建的实例??。将每个按钮设置为 null 有什么帮助吗??
    • 操作,对不起,我错过了你最后要回到根目录。在这种情况下尝试延迟的 GC.Collect,正如我在此处描述的 stackoverflow.com/questions/25198762/…
    • 另外,根据 Jason 在 1.2.3-pre3 中修复的说法,bug。
    • 更新到 1.2.3-pre4 后仍然抛出 OOM 异常。重新访问页面会不断增加堆空间。将尝试延迟 GC 并重新处理此问题。
    猜你喜欢
    • 2012-10-24
    • 2023-03-06
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多