Проблема с кэшированием изображений: источник изображения всегда выбирает изображение из кэша. в формах Xamarin

Я использую элемент управления изображениями в приложении Xamarin для Android. Используется в двух местах: на слайдере гамбургера и на странице контента. Я разрешаю изображение из веб-API и использую приведенный ниже код:

private void OnPresentedChanged(object sender, EventArgs e)
{

            ImgProfile.Source = new UriImageSource()
            {
                Uri = new Uri(Constants.ProfilePicUrl),
                CachingEnabled = true,
                CacheValidity = new TimeSpan(5,0,0,0)
            };
        }

Я попробовал приведенный выше код с обоими условиями CachingEnabled = true/false. Вот что я наблюдал:

CachingEnabled = False: Каждый раз, когда элемент управления изображением мерцает и перезагружает изображение. Я вижу промежуток времени в секунду или две между перезагрузкой изображения с веб-URL. Аналогично в меню слайдера.

CachingEnabled = true: Мой элемент управления изображением продолжает отображать кешированную версию, даже если URL-адрес имеет более новое/другое изображение, поскольку его страница профиля и пользователь могут изменить свое изображение профиля N раз в день. Итак, № 1 решает мою проблему, но мерцающая часть раздражает.

Обратите внимание, что мой элемент управления Image является собственным элементом управления изображениями xamarin. Кроме того, изображение профиля берется и загружается с камеры, поэтому нет возможности загрузить индивидуальное изображение меньшего размера, чтобы устранить задержку.

Надеюсь, моя проблема понятна вам, ребята.


person Amit Ranjan    schedule 22.05.2020    source источник
comment
нет возможности загрузить настроенное изображение меньшего размера - почему бы и нет? Вы можете изменить размер изображения перед загрузкой или у вас может быть код на сервере, который изменяет размер изображения.   -  person Jason    schedule 23.05.2020


Ответы (1)


//
// Summary:
//     Gets or sets a System.TimeSpan structure that indicates the length of time after
//     which the image cache becomes invalid.

public TimeSpan CacheValidity { get; set; }

Почему вы устанавливаете CacheValidity на 5 дней? Это означает, что ваше кешированное изображение всегда действительно до истечения 5 дней.

Я думаю, поэтому your image control keeps on displaying the cached version even if the url has newer/different image.

Попробуйте указать небольшое значение CacheValidity и загрузить снова, что-то вроде:

    // 10 seconds
    CacheValidity = new TimeSpan(0, 0, 0, 10);

    // 10 minutes
    CacheValidity = new TimeSpan(0, 0, 10, 0);

    // 1 hour
    CacheValidity = new TimeSpan(0, 1, 0, 0);
person Jack Hua    schedule 25.05.2020