2016-06-27 15 views
-1

PagerAdapterの5ページに表示する画像の束をAndroidアプリがダウンロードします。私は6pを含む複数のデバイスでそれをテストしています。私はOOMの問題を一貫して続けています。私は画像を縮小するためにカスタム変換を試みましたが、サーバーが正しいサイズの画像を返すように見え、BitmapFactory.optionsのinSampleSizeは1に変わりました。また、良いユーザーエクスペリエンスのために、5ページすべてに最初の3枚の画像を読み込んでいます。だから、約15の画像リクエストとピカソでかなり速く読み込まれるように要求されていても、同時に同時に要求することができます。私はデフォルトのBitmapConfigを使用しています。Picasso - Android - OutOfMemory読み込み中<4MBの画像

そして、私はダガーを使ってピカソのシングルトンインスタンスを挿入します。

@Provides 
@Singleton 
public Picasso providePicasso(OkHttpClient client) { 
    return new Picasso.Builder(context) 
      .loggingEnabled(true) 
      .indicatorsEnabled(true) 
      .downloader(new OkHttp3Downloader(client)) 
      .listener(new Picasso.Listener() { 
       @Override 
       public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
        Timber.e(exception, "Failed to load image: %s", uri); 
       } 
      }) 
      .build(); 
} 

、使用okHttpClientです:あなたは、以下のダンプ統計に表示されている場合は

private static OkHttpClient.Builder createOkHttpClient(Context context) { 
    // Install an HTTP cache in the application cache directory. 
    File cacheDir = new File(context.getCacheDir(), ShopConstants.HTTP); 
    Cache cache = new Cache(cacheDir, ShopConstants.IMAGE_DISK_CACHE_SIZE); 

    return new OkHttpClient.Builder() 
      .cache(cache) 
      .connectTimeout(ShopConstants.HTTP_TIMEOUT_VALUE, SECONDS) 
      .readTimeout(ShopConstants.HTTP_TIMEOUT_VALUE, SECONDS) 
      .writeTimeout(ShopConstants.HTTP_TIMEOUT_VALUE, SECONDS); 
} 

、サーバーからダウンロードされた画像の4メガバイトの唯一の合計があります。ただし、キャッシュサイズは24MBに増え、合計ビットマップサイズは約123MBになります。なぜビットマップサイズの合計がダウンロードした画像の合計サイズよりもずっと大きいのか分かりません。

===============BEGIN PICASSO STATS =============== 
Memory Cache Stats 
Max Cache Size: 28760941 
Cache Size: 24174420 
Cache % Full: 85 
Cache Hits: 0 
Cache Misses: 24 
Network Stats 
Download Count: 24 
Total Download Size: 4163837 
Average Download Size: 173493 
Bitmap Stats 
Total Bitmaps Decoded: 19 
Total Bitmap Size: 122061516 
Total Transformed Bitmaps: 3 
Total Transformed Bitmap Size: 3202668 
Average Bitmap Size: 6424290 
Average Transformed Bitmap Size: 177926 
===============END PICASSO STATS =============== 

私が間違っているかどうか教えてもらえますか?私がOOMを避けることができる唯一の方法は、マニフェスト上の「largeHeap」をオンにすることです。助けを事前に

どうもありがとう

+0

ビットマップは常に(ARGB_8888用)Wの*のH * 4がかかるので...ダウンロードしたCOMPRESSEDサイズは問題になりません。 – Selvin

+0

Picassoで利用可能なトリミングオプションを使用してみてください。 http://stackoverflow.com/questions/30011106/download-image-and-resize-to-avoid-oom-errors-picasso-fit-distorts-image – Ajit

答えて

0

それがロードされたイメージがクリアされますので、ピカソは、より多くのメモリを取っています。グライドを使用すると、ピカソと比較してメモリが少なくなり、ローディング時間もピカソと比べて非常に少なくなります。
構文:

Glide.with(context) 
.load("imgpath or http link") 
.into(Imgview); 

依存関係:
コンパイル 'com.github.bumptech.glide:グライド:3.5.2'

関連する問題