我有一個Mvx基本的iOS項目,它有圖像下載的問題。MvxDynamicImageHelper不可靠
我有一對夫婦包含UICollectionViews和UICollectionViewCells使用MvxDynamicImageHelpers自己的UIImageViews的圖片設置爲託管在互聯網(Azure的BLOB通過Azure的CDN在實際上存儲)圖像屏幕。我注意到圖像有時不會出現,並且在較慢的連接上以及如果在圖像加載時滾動瀏覽整個UICollectionView,這種情況更常見 - 大概是因爲它啓動了大量的同時下載。重新啓動應用程序會導致顯示一些但不是全部的圖像。
展望緩存/ Pictures.MvvmCross文件夾我看到有許多具有.tmp擴展名的文件和一些沒有.tmp擴展名,但一個0字節的文件大小。我認爲.tmp文件是應用程序重新啓動後重新下載的文件,而且無效的內存中緩存條目導致它們在這種情況發生之前不會被重新下載。
我已經實現了我的MvxDownloadRequest和MvxHttpFileDownloader的版本和註冊我的IMvxHttpFileDownloader。 MvxHttpFileDownloader中唯一的修改是使用我的MvxDownloadRequest而不是標準的Mvx。
據我所見,在MvxDownloadRequest.Start或MvxDownloadRequest.ProcessResponse中沒有引發異常,MvxDownloadRequest.FileDownloadFailed沒有被調用。已經取代MvxDownloadRequest.Start用下面的,所有圖像都總是下載併成功顯示:
try
{
ThreadPool.QueueUserWorkItem((state) => {
try
{
var fileService = this.GetService<IMvxSimpleFileStoreService>();
var tempFilePath = DownloadPath + ".tmp";
var imageData = NSData.FromUrl(NSUrl.FromString(Url));
var image = UIImage.LoadFromData(imageData);
NSError nsError;
image.AsPNG().Save(tempFilePath, true, out nsError);
fileService.TryMove(tempFilePath, DownloadPath, true);
}
catch (Exception exception)
{
FireDownloadFailed(exception);
return;
}
FireDownloadComplete();
});
}
catch (Exception e)
{
FireDownloadFailed(e);
}
所以,這可能是導致與不影響上述版本的標準的WebRequest的問題?我猜測這對於GC來說很重要,並且在我得到時間後會進一步調試,但這不會在一段時間內不幸出現。如果有人可以回答這個問題,或者在我看的時候提供指針,我會非常感激。
感謝,
Ĵ