Xamarin Android - OutOfMemoryError 异常 - 大图
Xamarin Android - OutOfMemoryError exception - large image
我得到一个 InflateException
之前抛出的 OutOfMemoryError
异常。我知道我应该能够通过减少图像的 size/resolution 或将 android:largeHeap="true"
添加到我的清单来解决问题,但是发生了一些奇怪的事情。
当我第一次膨胀视图时没有抛出这个异常。我有一个正在使用的 Activity
,其中包含一个 PreferenceFragment
。当您 select 在 PreferenceFragment
中的一行时,您将被带到 Fragment
,其中显示了一些图像和文本。只有在其中几个片段之间来回导航后才会抛出异常。在我看来,有些东西没有得到妥善处理,因为这会发生在任何一个碎片上,但从来没有发生过第一次、第二次或第三次。
有没有一种方法可以确保从这些片段之一返回时所有内容都得到处理?
在Fragment
的OnCreateView
中抛出异常的行:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.Inflate(MyResource, container, false);
}
同样值得注意的是,仅在从 activity 打开几个不同的片段后才会抛出异常。你可以整天在同一个之间来回切换,也不会抛出异常。
我在开发我的一个应用程序时遇到了类似的事情。在我的应用程序中,单击列表项时,会在单独的片段中向用户显示图像。单击三个或四个列表项后。我看到了一个内存不足的异常,类似于你描述的那个。
我通过在图像显示片段中显式调用垃圾回收解决了这个问题。 Xamarin 的 C# 代码如下:
System.GC.Collect ();
我将其从 Android 移植到 C#
https://github.com/koush/UrlImageViewHelper
如果需要处理大图,我可以post代码。
我得到一个 InflateException
之前抛出的 OutOfMemoryError
异常。我知道我应该能够通过减少图像的 size/resolution 或将 android:largeHeap="true"
添加到我的清单来解决问题,但是发生了一些奇怪的事情。
当我第一次膨胀视图时没有抛出这个异常。我有一个正在使用的 Activity
,其中包含一个 PreferenceFragment
。当您 select 在 PreferenceFragment
中的一行时,您将被带到 Fragment
,其中显示了一些图像和文本。只有在其中几个片段之间来回导航后才会抛出异常。在我看来,有些东西没有得到妥善处理,因为这会发生在任何一个碎片上,但从来没有发生过第一次、第二次或第三次。
有没有一种方法可以确保从这些片段之一返回时所有内容都得到处理?
在Fragment
的OnCreateView
中抛出异常的行:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.Inflate(MyResource, container, false);
}
同样值得注意的是,仅在从 activity 打开几个不同的片段后才会抛出异常。你可以整天在同一个之间来回切换,也不会抛出异常。
我在开发我的一个应用程序时遇到了类似的事情。在我的应用程序中,单击列表项时,会在单独的片段中向用户显示图像。单击三个或四个列表项后。我看到了一个内存不足的异常,类似于你描述的那个。
我通过在图像显示片段中显式调用垃圾回收解决了这个问题。 Xamarin 的 C# 代码如下:
System.GC.Collect ();
我将其从 Android 移植到 C#
https://github.com/koush/UrlImageViewHelper
如果需要处理大图,我可以post代码。