イメージのダウンロードに問題がある Mvx ベース iOS プロジェクトがあります。
UICollectionViews を含む画面がいくつかあり、UICollectionViewCells は MvxDynamicImageHelpers を使用して、UIImageViews のイメージをインターネット上でホストされているイメージに設定します (実際には Azure CDN を介した Azure BLOB ストレージ)。画像が表示されないことがあり、これは接続が遅い場合に一般的であり、画像の読み込み中に UICollectionView 全体をスクロールすると、おそらく多数の同時ダウンロードが開始されることに気付きました。アプリを再起動すると、すべてではなく一部の画像が表示されます。
Caches/Pictures.MvvmCross フォルダを見ると、拡張子が .tmp のファイルと、拡張子が .tmp でなくファイル サイズが 0 バイトのファイルがいくつかあることがわかります。.tmp ファイルは、アプリの再起動後に再ダウンロードされるファイルであり、無効なメモリ内キャッシュ エントリが原因で、これが発生するまで再ダウンロードされないと推測されます。
私のバージョンの MvxDownloadRequest と MvxHttpFileDownloader を実装し、IMvxHttpFileDownloader を登録しました。MvxHttpFileDownloader の唯一の変更点は、標準の Mvx の代わりに私の MvxDownloadRequest を使用することです。
私が見る限り、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に関係していると推測しており、時間があればさらにデバッグを行いますが、残念ながらこれはしばらくの間ではありません. 誰かがこれに答えたり、私がそれを見たときの指針を提供したりできれば、非常にありがたいです.
ありがとう、
J