2016-04-02 2 views
0

私は現在以下を行っています: 私はRecyclerViewをfragment.Iに表示するには、サーバーからの画像と共にデータをロードしてください。私はサーバーデータと画像を読み込むためにIonライブラリを使用しています。私はグーグルで、Volley excutes asynchronouslyを見つけました。私はhereと言いました。私は疑いがあります:非同期実行とは、Androidのメインスレッドを使用してデータがロードされていないことを意味しますか?

  1. イオン/ボレーは非同期に実行されます。つまり、メインのUIスレッドで実行されないということですか?あるいは、別のスレッドで非同期的に実行されますか?
  2. Ionを使用してメインスレッドにデータをロードしているので、私のrecyclererviewがぎくしゃくしていると私は教えてくれました。画像を読み込むためにピカソを使用するとジャーキー効果が防止されます。だから誰も私にこれをクリアすることができますか?
+1

最初の点で両方の質問が同じことを意味します。何かが非同期に実行されると、メインのUIスレッドで実行されないことを意味します。つまり、別のスレッドで実行されます。 Volleyはデータをロードするのにまったくいいですが、おそらくIonもそうですが(私はそれについて聞いたことはありません)。 – Wukash

答えて

1

[何か]を実行すると、[何か]が[何か]が起動した同じスレッドで実行されないことを意味します。

メインロードをブロックしないように、画像やデータのロード、ネットワークコール、ロングプロセッシングコールはすべて非同期で実行する必要があります。

デフォルトでは、VolleyとPicassoは非同期で実行されます。 たとえば、Volley要求をキューに追加すると、キャッシュとネットワークディスパッチャを別のスレッドで使用して処理します。しかし、あなたが戻ってきたコールバックはメインスレッドで受信されますので、余分なコード行なしでUIを使用して作業することができます。 Volleyは、リモートピクチャをロードするためにも使用できます。

ローカルまたはリモートの画像をリストまたはRecyclerViewに読み込むには、glideを試してみてください。これはとてもうまく動作します。

一般にネットワークデータの場合、他の良いオプションはjusです。そのようなボレーが、より多くのオプションとより柔軟性があります。

0

イオン/ボレーは非同期に実行される。つまり、メインのUIスレッドで実行されないということですか?あるいは、別々のスレッドで非同期的に実行されますか?

あなたが非同期的に実行するものがメイントレッドから独立している場合は、並列実行されます。私はIon.Iを使用して、メインスレッド上で データをロードしたため

誰かが私のrecyclerviewがぎくしゃくしたことを私に言った 負荷イメージにピカソを使用すると、ぎくしゃくした効果を阻止することを読みました。だから誰も私をクリアすることができます これも?

そのためには、画像を読み込むための画像ローダーライブラリを使用する必要があります。あなたが使用することができます。

  1. ユニバーサルイメージ・ローダー
  2. ピカソに
  3. グライド
0

を私はイオン使用していないが、あなたのアプリがNetworkOnMainThreadException投げされていない場合は、その後、イオンはあまりにもオフネットワークイメージをフェッチUIスレッドその点では、それはVolley、Picasso、Glideと同じでなければなりません。

あなたがUI janksを使用していて、それがイオンのためであると仮定すると、画像がネットワークからフェッチされると、Ionは何らかのデコードやスケーリングなどを実行するためです。それが問題の原因になっている可能性があります。 Picasso、Volley、Glide、(私が推測する)イオンは、可能な限り高速かつ効率的になるように、画像のデコード、フィッティングなどに関してさまざまなアプローチやテクニックを使用します。多分、イオンがそれに輝いていないかもしれない。

私はイオンに問題がある場合は、PicassoまたはGlideに変更してください。

関連する問題