2016-04-28 4 views
0

NativeScriptがシングルスレッドであることを認識しています。リストビューで画面間に30〜40の画像を表示する必要のあるアプリケーションを構築する。ただし、一度ダウンロードされると、URLが直接バインドされているとイメージはキャッシュされません。最初-page.xmlでスニペットListView用にNativeScriptでサーバーから画像を取得中にアプリケーションが応答しない

<ListView images={{images}}> 
<Image src={{theImageUrl}}></Image> 
</ListView> 

最初のページと2ページの間で前後に横断しながら、画像を再ダウンロードしてキャッシュされていないと仮定する。これを防止するために、すべての画像については、次のロジックを実装:

imageSource.fromUrl("theImageUrl").then(function(res){ 
//code to save the image to either temp or the documents folder 
}); 

しかし、40枚の画像は、少なくとも20必要 - 高いアプリケーションの初期化時間をもたらす、ロードするために22秒。

回避策は、バックグラウンドでイメージをダウンロードし、ダウンロードが完了したらイメージsrcプロパティ(theImageUrl)をローカルイメージパスに切り替えて、ユーザーにそのアプリケーションを見せてからそれまでに対話させることです。

この方法では、すべての画像がダウンロードされるまでアプリが応答しなくなり、画面のタップはキャプチャされません。

解決策はありますか?誰かがこれを見つけましたか?メインのUIスレッドに画像をダウンロードすることは、私が想定している問題の原因です。

+1

イメージキャッシュモジュールを使ってみましたか?{N}ドキュメントの使い方のリンクは、https://docs.nativescript.org/ApiReference/ui/image-cache/HOW-TOにあります。 html –

+1

また、画像でAndroidのメモリ処理にフレスコ画やPicassoを使用することもできます。どちらのライブラリにもプラグインがあります –

+0

iOS向けのソリューションはありますか? – basum

答えて

0

画像を扱う際のAndroidといえば、メモリ/パフォーマンス管理は共通の課題です。このような問題を克服する最善の方法は、Frescoのような図書館を経由することです。 this NativeScriptプラグインを使用すると、{N}アプリケーションでAndroid Frescoライブラリを使用したり、ウェブストアやローカルストレージから画像を表示したりすることができます。

私たちは現在、アニメーション画像、バックグラウンドと失敗のプレースホルダ、プログレスバー、コーナーラウンディング、ダイナミックのサポートなど、{N}プラグインにFrescoライブラリのほとんどの機能をもたらすこのプラグインのアップグレードに取り組んでいますサイジング(パーセンテージ)などがあります。

+0

iOS向けソリューションはありますか? – basum

関連する問題