Skip to content

Commit 4f0065f

Browse files
committed
Consider largeHeap param while define memory cache size
1 parent c0594bd commit 4f0065f

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

library/src/com/nostra13/universalimageloader/core/DefaultConfigurationFactory.java

+25-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
*******************************************************************************/
1616
package com.nostra13.universalimageloader.core;
1717

18+
import android.annotation.TargetApi;
19+
import android.app.ActivityManager;
1820
import android.content.Context;
21+
import android.content.pm.ApplicationInfo;
22+
import android.os.Build;
1923
import com.nostra13.universalimageloader.cache.disc.DiskCache;
2024
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
2125
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiscCache;
@@ -107,13 +111,32 @@ private static File createReserveDiskCacheDir(Context context) {
107111
* Creates default implementation of {@link MemoryCache} - {@link LruMemoryCache}<br />
108112
* Default cache size = 1/8 of available app memory.
109113
*/
110-
public static MemoryCache createMemoryCache(int memoryCacheSize) {
114+
public static MemoryCache createMemoryCache(Context context, int memoryCacheSize) {
111115
if (memoryCacheSize == 0) {
112-
memoryCacheSize = (int) (Runtime.getRuntime().maxMemory() / 8);
116+
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
117+
int memoryClass = am.getMemoryClass();
118+
if (hasHoneycomb() && isLargeHeap(context)) {
119+
memoryClass = getLargeMemoryClass(am);
120+
}
121+
memoryCacheSize = 1024 * 1024 * memoryClass / 8;
113122
}
114123
return new LruMemoryCache(memoryCacheSize);
115124
}
116125

126+
private static boolean hasHoneycomb() {
127+
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
128+
}
129+
130+
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
131+
private static boolean isLargeHeap(Context context) {
132+
return (context.getApplicationInfo().flags & ApplicationInfo.FLAG_LARGE_HEAP) != 0;
133+
}
134+
135+
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
136+
private static int getLargeMemoryClass(ActivityManager am) {
137+
return am.getLargeMemoryClass();
138+
}
139+
117140
/** Creates default implementation of {@link ImageDownloader} - {@link BaseImageDownloader} */
118141
public static ImageDownloader createImageDownloader(Context context) {
119142
return new BaseImageDownloader(context);

library/src/com/nostra13/universalimageloader/core/ImageLoaderConfiguration.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ private ImageLoaderConfiguration(final Builder builder) {
113113
* <li>threadPoolSize = {@link Builder#DEFAULT_THREAD_POOL_SIZE this}</li>
114114
* <li>threadPriority = {@link Builder#DEFAULT_THREAD_PRIORITY this}</li>
115115
* <li>allow to cache different sizes of image in memory</li>
116-
* <li>memoryCache = {@link DefaultConfigurationFactory#createMemoryCache(int)}</li>
116+
* <li>memoryCache = {@link DefaultConfigurationFactory#createMemoryCache(android.content.Context, int)}</li>
117117
* <li>diskCache = {@link com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache}</li>
118118
* <li>imageDownloader = {@link DefaultConfigurationFactory#createImageDownloader(Context)}</li>
119119
* <li>imageDecoder = {@link DefaultConfigurationFactory#createImageDecoder(boolean)}</li>
@@ -157,7 +157,7 @@ public static class Builder {
157157
/** {@value} */
158158
public static final int DEFAULT_THREAD_POOL_SIZE = 3;
159159
/** {@value} */
160-
public static final int DEFAULT_THREAD_PRIORITY = Thread.NORM_PRIORITY - 1;
160+
public static final int DEFAULT_THREAD_PRIORITY = Thread.NORM_PRIORITY - 2;
161161
/** {@value} */
162162
public static final QueueProcessingType DEFAULT_TASK_PROCESSING_TYPE = QueueProcessingType.FIFO;
163163

@@ -581,7 +581,7 @@ private void initEmptyFieldsWithDefaultValues() {
581581
.createDiskCache(context, diskCacheFileNameGenerator, diskCacheSize, diskCacheFileCount);
582582
}
583583
if (memoryCache == null) {
584-
memoryCache = DefaultConfigurationFactory.createMemoryCache(memoryCacheSize);
584+
memoryCache = DefaultConfigurationFactory.createMemoryCache(context, memoryCacheSize);
585585
}
586586
if (denyCacheImageMultipleSizesInMemory) {
587587
memoryCache = new FuzzyKeyMemoryCache(memoryCache, MemoryCacheUtils.createFuzzyKeyComparator());

0 commit comments

Comments
 (0)