10

私はユニバーサル イメージ ローダーを使用していますが、毎日、ユーザーの読み込みに失敗する非常に多くのイメージが表示されます。このコードを使用して、エラーを分析に取得しています。

public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
  try
  {
    String fail = failReason.getType().toString();
    String fail4 = failReason.getCause().toString();
    String sum = fail + " " + fail4;
    EasyTracker.getTracker().sendException(sum, false);
  }
  catch (Exception e)
  {
    EasyTracker.getTracker().sendException(e.getMessage(), false);
  }
}

ほとんどの場合、getType または getCause が null であるため、例外がキャッチされます。この問題は 2.1 ~ 2.3 の Android バージョンのデバイスで見られますが、4.0.4 や 4.2.2 などの新しいバージョンからの報告もあります。そのため、画像の読み込みに失敗した原因が本当にわかりません

もう 1 つの問題はIO_ERROR java.io.EOFException、主に新しい Android バージョンで見られる です。

最も一般的なエラーの 3 番目は out_of_memory エラーです... 読み込もうとしている画像は 1 MB 以下ですが、ScaleType.Exactly が必要ですが、より大きな画像を読み込んでいる間は、メモリやディスクにキャッシュしていません。 out_of_memory の可能性がありますが、それでもかなり頻繁に発生します。

私の構成:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(xxx.getApplicationContext())
.threadPoolSize(4)
.memoryCache(new WeakMemoryCache())
.imageDownloader(new BaseImageDownloader(xxx.getApplicationContext(),10 * 1000, 30 * 1000)) 
.build();

if(!ImageLoader.getInstance().isInited())
            ImageLoader.getInstance().init(config);

// options is used for images smaller in size (5kb-150kb)
options = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.showStubImage(R.drawable.stub)
.showImageOnFail(R.drawable.failed)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();

// options2 is used for images big in size (300kb-1,2mb)
options2 = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub)
.showImageOnFail(R.drawable.failed)
.imageScaleType(ImageScaleType.NONE) // NONE because I need to have full size bitmap loaded
.bitmapConfig(Bitmap.Config.RGB_565)
.build();

imageLoading を最適化して、画像の読み込みに失敗する回数を減らす方法を誰か教えてもらえますか? これらの絶え間ない画像の読み込み失敗のために、ユーザーを失っているような気がするからです.

更新 nostra で提案されているようにコードを変更したonLoadingFailedので、持っていないすべてのレポート.getCause()が「DECODING_ERROR」であり、これらはすべて Android 2.2-2.3.6 バージョンによって報告され、新しいバージョンからは報告されていないことがわかりました。まだ私のユーザーの大部分は古いアンドロイドを使用していますが、このdecoding_errorを減らす方法はありますか? 古い Android で自分でアプリをチェックしたところ、画像はほとんどの場合読み込まれますDECODING_ERRORが、分析では最も頻繁に報告されます。最も一般的な理由の 2 番目は、依然として同じです。IO_ERROR java.io.EOFException

更新 2

nostra が提案したようにダウンローダーをカスタマイズし、threadPoolSize を 3 に減らして余分な読み込みを設定しました。読み込みに失敗した場合は、あきらめる前にもう一度読み込みを試みます。ロードの失敗が約 30% 減少したことがわかります。しかし、それでも発生します - 100 のデコード エラー (2.2-2.3.6 バージョンのみ) と、500 人の毎日のアクティブ ユーザーからの 3 日間で 160 の EOF エラー (4.0 以上)。

アップデート 3

最新の更新バージョンでは、デコード エラーと EOFExceptions がはるかに少なくなります。これは、最初の読み込みに失敗した場合に同じ画像を再読み込みしようとすることが主な理由だと思います。しかし..私は今、別の問題に直面しています: No space left on device java.io.IOException: write failed: ENOSPC (No space left on device)。LimitedDiscCache を使用しています。

4

2 に答える 2