2015-05-19 4 views
0

Я создаю приложение с использованием Xamarin.Forms, и у меня есть страница «галерея». Эта страница состоит из многих изображений, которые загружаются на страницу.Xamarin.Forms - кеширование страниц

Загрузка изображений занимает довольно много времени, а при переходе на другую страницу и последующем возвращении с использованием Navigation.PopAsync и Navigation.PushAsync снова необходимо восстановить всю страницу (фото загружается снова) ,

Я пробовал кэширование страницы (так не делать Navigation.PushAsync (новый GalleryPage()) все время, но сохранить его в переменной, но это не имеет никакого значения.

Кто-нибудь знает, как кэшировать страницу целиком, так что не нужно загружать все заново?

Спасибо

ответ

0

Если вы сохраняете страницу объекта в переменную, так что вы делаете

Page myPage = new Page(); 
Navigation.PushAsync(myPage); 

, а затем затем

Navigation.PushAsync(myPage); 

, который, безусловно, должен содержать страницу, загруженную в память.

Изображения, как правило, также кэшируются. Поэтому, если вы получаете их из URL-адреса, они будут кэшироваться.

Если вы получаете их из базы данных, это может быть источником задержки, особенно если вы попросите его пойти и обновить список.

+0

Я пробовал, что изображения загружаются из файловой системы. Однако, когда страница отбрасывается обратно в стек, существует длинная задержка до тех пор, пока страница не будет показана. (Он полностью отображает страницу перед показом, получая много сообщений, таких как «[Хореограф] Пропустил 486 кадров! Приложение может делать слишком много работы над своей основной нитью».). В методе «OnAppearing» нет кода. – user1313119

+0

Мне нужно будет увидеть, как ваш код даст вам больше направления. Кажется, вы перегружаете поток пользовательского интерфейса, и это может быть проблема с эмулятором. Как ваш код работает на реальном устройстве Android? –

+0

Так же ужасно ... – user1313119

0

Проблема, вероятно, связана с размером и количеством отображаемых изображений.

Я имел дело с той же вопросу в два этапа:

  • Create thumbnails - большие изображения займет намного больше времени для загрузки, и если у вас есть много из них на экране все они малы. Возможно, стоит их свернуть, когда они входят и сохраняют миниатюру. Изображение с изображением камеры может составлять 5-8 МБ, если эскиз может быть 20-30K. Большое изображение также нужно будет уменьшать каждый раз, когда вы его показываете.

  • Используйте ListView, чтобы показать изображения, а не любые Grid, StackLayout или все, что у вас есть. Разница в том, что ListView визуализируется более динамично, он создает строки только по мере их отображения, поэтому не все изображения загружаются в память. В качестве альтернативы вы можете создать свою собственную логику, которая динамически загружает и выгружает изображения. Худший случай, чтобы следить за использованием прокрутки, заполненной изображениями - они, вероятно, попытаются отобразить, даже когда они за кадром

+0

Спасибо за вашу реакцию, мы уже используем миниатюры, но не используем Listview. Я попробую и вернусь как можно скорее. – user1313119

+0

Я только что кое-что проверил в Listviews, и у меня есть вопрос. Мы пытаемся создать галерею, подобную этому примеру (http://sapegin.github.io/jquery.mosaicflow/). Просто изображения разных размеров. Возможно ли это со списком, потому что нет столбцов? – user1313119

+0

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