2015-12-30 3 views
1

Я получаю InflateException, которому предшествует исключение OutOfMemoryError. Я понимаю, что я должен решить эту проблему, уменьшив размер/разрешение изображения или добавив в мой манифест android:largeHeap="true", но что-то необычное происходит.Xamarin Android - исключение OutOfMemoryError - большое изображение

Это исключение не бросается, когда я впервые надуваю представление. У меня есть Activity, который я использую, который содержит PreferenceFragment. Когда вы выбираете строку в PreferenceFragment, вы попадаете в Fragment, который показывает некоторые изображения и текст. Исключение вызывается только после перемещения между этими фрагментами вперед и назад. Мне кажется, что что-то не устраняется должным образом, поскольку это произойдет на любом из фрагментов, но никогда не происходит в первый, второй или третий раз.

Есть ли способ, которым я могу обеспечить, чтобы все удалялось при возвращении от одного из этих фрагментов?

Line, где исключение в OnCreateView из Fragment:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    return inflater.Inflate(MyResource, container, false); 
} 

Также стоит отметить, исключение только после того, как брошено несколько различных фрагментов открываются из деятельности. Вы могли бы идти туда и обратно между тем же самым днем ​​и исключение не было бы брошено.

+1

GC.Collect будет работать, но я бы посмотрел на http://stackoverflow.com/a/28868582/4984832, чтобы реально понять проблему и как Dispose/OnDestroy, чтобы очистить ваш фрагмент (и) правильно – SushiHangover

ответ

3

Я столкнулся с чем-то похожим при разработке одного из моих приложений. В моем приложении, щелкнув элемент списка, пользователь показал изображение в отдельном фрагменте. После нажатия трех или четырех элементов списка. Я видел исключение из памяти, подобное тому, которое вы описываете.

Я решил это, явно называя сборку мусора в моем фрагменте отображения изображения. C# код Xamarin следующим образом:

System.GC.Collect();

+1

Правильно. Вот почему (в принятом ответе): http://stackoverflow.com/questions/34474379/shouldn%C2%B4t-gc-run-automatically-in-xamarin-android-before-runing-out-of -Память – xleon

Смежные вопросы