Xamarin.android Xamarin.Forms-Android中的内存不足异常

Xamarin.android Xamarin.Forms-Android中的内存不足异常,xamarin.android,xamarin.forms,Xamarin.android,Xamarin.forms,我开发的应用程序是一个调查应用程序。我的应用程序的导航类似于此Page1-->Page2-->Page3-->Page4-->Page1。当从一个页面导航到另一个页面时,每次都会占用堆空间,从而导致OOM异常 我试过了 OnDisappearing()中的GC.Collect()在每个页面中都没有帮助 在MainActivity中使用了override OnLowMemory() 已删除高分辨率图像 我在using块中也使用了按钮渲染器的位图,除此之外,我在其他任何地方都没有使用位图 如何

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

我试过了

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

  • 在MainActivity中使用了override OnLowMemory()

  • 已删除高分辨率图像

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

如何减少堆空间使用量的增长??我找不到释放堆空间的方法。它不断增加,导致OOM异常


任何人都可以指出一些有用的方向来克服这个问题吗???

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

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


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

这不是吗。Navigation.PopModalAsync()将删除已创建的实例??。将每个按钮设置为null会有帮助吗?哦,对不起,我错过了,您将在最后返回根目录。尝试延迟GC.Collect,在这种情况下,正如我在这里所描述的,并且在更新到1.2.3-pre4之后,可能仍然会抛出一个in-OOM异常。重新访问页面会不断增加堆空间。将尝试延迟GC并重新开始。
public override void OnLowMemory() 
{
  GC.Collect ();
}