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」をオンにすることです。助けを事前に
どうもありがとう
ビットマップは常に(ARGB_8888用)Wの*のH * 4がかかるので...ダウンロードしたCOMPRESSEDサイズは問題になりません。 – Selvin
Picassoで利用可能なトリミングオプションを使用してみてください。 http://stackoverflow.com/questions/30011106/download-image-and-resize-to-avoid-oom-errors-picasso-fit-distorts-image – Ajit