2014-09-30 43 views
2

我开发的应用程序是调查应用程序。我的应用程序的导航类似于这个第1页 - >第2页 - 第3页 - 第4页 - 第1页。从一个页面导航到另一个页面时,每次都会占用堆空间,导致OOM异常。Xamarin.Forms中的内存不足异常 - Android

我已经试过

  • GC.Collect的()在OnDisappearing()在每一个页面,它并没有帮助

  • 用于覆盖OnLowMemory()在MainActivity。

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

我已经用了太using块内,除此之外我没有使用位图别处按钮渲染位图。

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

任何人都可以请指出一些有用的方向来克服?

回答

3

问题是Forms将页面实例保存在导航堆栈的内存中。 当下一页导航到(当然,图像可能是最大的内存猪),并且当页面再次进入焦点时,我会尽可能多地处理资源。 垃圾收集器不会帮助,因为所有内容都仍然被引用。

这就是说我认为导航没有做得好。你可以做的一件事是投你的uservoice,并希望Xamarin最终会改善它。

更新:我错过了OP将在最后根页面,所以这个答案将适用于用户保持向前导航。

+0

不会** this.Navigation.PopModalAsync()**删除已创建的实例??。将每个按钮设置为null会有帮助吗? – 2014-09-30 14:01:52

+0

行动,对不起,我错过了你最后回到根。尝试延迟GC.Collect在这种情况下,因为我在这里描述http://stackoverflow.com/questions/25198762/is-this-a-memory-leak-in-xamarin-forms/26115245#26115245 – 2014-09-30 14:30:35

+0

加上可能已经根据Jason在1.2.3-pre3中的修正,<1.2.3版本中有一个[bug](https://bugzilla.xamarin.com/show_bug.cgi?id=21995)。 – 2014-09-30 15:56:06