рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рднреА рдмрд┐рдЯрдореИрдкреНрд╕ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧреНрд░реЗрдбрд▓ ( 1.1.0
) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд░реЗрд╕реНрдХреЛ рд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЕрдХреНрд╕рд░ рдУрдУрдПрдо рдлреЗрдВрдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ 8- 10 рдЪрд┐рддреНрд░ (рд╕рднреА рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреЗ рдирд╣реАрдВ, рдХреБрдЫ рдЖрдзреЗ рд╕реНрдХреНрд░реАрди рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдХреБрдЫ рдХреЗрд╡рд▓ 50-70dp рдЖрдХрд╛рд░ рд▓реЗрддреЗ рд╣реИрдВ) рд╕рд┐рдВрдЧрд▓ рд╕реНрдХреНрд░реАрди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдлреНрд░реЗрд╕реНрдХреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЫрд╡рд┐рдпрд╛рдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдШрдЯрдХреЛрдВ рдЬреИрд╕реЗ ListView, GridView, RecyclerView рдХреЗ рд╕рд╛рде рд╣реИрдВ, рдЬрдмрдХрд┐ рдХреБрдЫ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░реНрдирд╡реАрдиреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдиреАрдЪреЗ рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ:
setDownsampleEnabled
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИresized
, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реА рдХреБрдЫ рдЫрд╡рд┐рдпрд╛рдВ .png
рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ jpeg
рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИрдВрдХреНрд░реИрд╢ рд▓реЙрдЧ
03-15 22:21:21.199 7035-7203/com.xyz E/AndroidRuntime: FATAL EXCEPTION: Thread-442
Process: com.xyz, PID: 7035
java.lang.OutOfMemoryError: Failed to allocate a 1638412 byte allocation with 589552 free bytes and 575KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:831)
at android.graphics.Bitmap.createBitmap(Bitmap.java:808)
at android.graphics.Bitmap.createBitmap(Bitmap.java:775)
at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:55)
at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:30)
at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:259)
at com.facebook.imagepipeline.platform.ArtDecoder.decodeStaticImageFromStream(ArtDecoder.java:137)
at com.facebook.imagepipeline.platform.ArtDecoder.decodeJPEGFromEncodedImage(ArtDecoder.java:120)
at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decodeJpeg(DefaultImageDecoder.java:183)
at com.facebook.imagepipeline.decoder.DefaultImageDecoder$1.decode(DefaultImageDecoder.java:63)
at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decode(DefaultImageDecoder.java:123)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:239)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200(DecodeProducer.java:111)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:144)
at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:207)
at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:27)
at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43)
at java.lang.Thread.run(Thread.java:818)
03-15 22:44:53.849 8055-8055/com.xyz E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xyz, PID: 8055
android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class <unknown>
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at com.xyz.view.newswipe.view.FbLikesGridView$FbLikesAdapter.onCreateViewHolder(FbLikesGridView.java:195)
at com.xyz.view.newswipe.view.FbLikesGridView$FbLikesAdapter.onCreateViewHolder(FbLikesGridView.java:160)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6319)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5507)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5392)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5388)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2149)
at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1496)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:593)
at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3535)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2979)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1112)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:632)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1112)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:632)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:18788)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewG
[рдЗрд╕реЗ рднрд░реЗрдВ: рд╣рдо рдмрдЧ рдХреЛ рдХреИрд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЫрд╡рд┐рдпреЛрдВ рдпрд╛ рдПрдХ рдирдореВрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП URL рдкреНрд░рджрд╛рди рдХрд░реЗрдВред]
[рд╡реИрдХрд▓реНрдкрд┐рдХ: рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред]
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдлрд╝реНрд░реЗрд╕реНрдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд░рд╣реЗ рд╣реИрдВред
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig
.newBuilder(getApplicationContext())
.setDownsampleEnabled(true)
.setBitmapMemoryCacheParamsSupplier(new FrescoCacheParams(activityManager))
.build();
Fresco.initialize(getApplicationContext(), imagePipelineConfig);
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ FrescoCacheParams
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
public class FrescoCacheParams implements Supplier<MemoryCacheParams> {
private ActivityManager activityManager;
public FrescoCacheParams(ActivityManager activityManager) {
this.activityManager = activityManager;
}
<strong i="17">@Override</strong>
public MemoryCacheParams get() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int cacheSize = getMaxCacheSize();
Log.d("####","fresco cache size = " + cacheSize);
return new MemoryCacheParams(cacheSize, 1, 1, 1, 1);
} else {
return new MemoryCacheParams(
getMaxCacheSize(),
256,
Integer.MAX_VALUE,
Integer.MAX_VALUE,
Integer.MAX_VALUE);
}
}
private int getMaxCacheSize() {
final int maxMemory = Math.min(activityManager.getMemoryClass()
* ByteConstants.MB, Integer.MAX_VALUE);
if (maxMemory < 32 * ByteConstants.MB) {
return 4 * ByteConstants.MB;
} else if (maxMemory < 64 * ByteConstants.MB) {
return 6 * ByteConstants.MB;
} else {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD) {
return 8 * ByteConstants.MB;
} else {
return maxMemory / 6;
}
}
}
}
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд╣рд╛рдВ width
рдФрд░ height
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рджреГрд╢реНрдп рд╣реИрдВ рдЬреЛ рд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setResizeOptions(new ResizeOptions(width, height))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(getController())
.setImageRequest(request)
.build();
setController(controller);
рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдкреБрдирд░реНрдЪрдХреНрд░рдг рддрд░реНрдХ рдХрд╛ рдЕрдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ AdapterView
рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд╣рдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦ рд░рд╣реЗ рд╣реИрдВред
// calling on each Drawee, once it moves out of visible area
if (getController() != null) {
getController().onDetach();
}
````
// once a image moves out of display area, we are evicting it out of pipeline as well.
ImagePipeline imagePipeline = Fresco.getImagePipeline();
Uri uri = Uri.parse(url);
imagePipeline.evictFromMemoryCache(uri);
```
рд╣рдо рд╕рднреА Drawee's
рдкрд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ AdapterView
рдкрд░ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЙрдЯ рдХрд╛рд░реНрдб рдХреЗ рднреАрддрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдирдорд╕реНрддреЗ @nucleartip , рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдУрдУрдПрдо рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдбрдВрдк рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ?
рд╡реИрд╕реЗ, рд▓реЙрд▓реАрдкреЙрдк рдФрд░ рдЙрд╕рд╕реЗ рдКрдкрд░ рдХреЗ рд▓рд┐рдП рдЖрдк maxCacheEntrySize=1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдореЗрдореЛрд░реА рдХреИрд╢ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЖрдЗрдЯрдо рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ?
@erikandre рдмрдбрд╝реА рдХрддрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ OOM рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рджрд░ рд╕реЗ рдлреЗрдВрдХ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдореЗрдореЛрд░реА рдХреИрд╢ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде рдЧрдпрд╛ред
рдореБрдЭреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдбрдВрдк рдХрд░рдиреЗ рджреЗрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╕реБрдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдУрдУрдПрдо рдирдИ рдкреАрдврд╝реА рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдЬреИрд╕реЗ рд╕реИрдорд╕рдВрдЧ рдПрд╕ 7, рдирд╡реАрдирддрдо рдиреЗрдХреНрд╕рд╕ рд╕реАрд░реАрдЬ рдлреЛрди рдЖрджрд┐ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред
@erikandre рдпрд╣рд╛рдБ рдореЗрдореЛрд░реА рдбрдВрдк рдХрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реИ, рдЬреЛ OOM рдХреЗ рдХрд╛рд░рдг рдРрдк рдХреЗ рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@nucleartip , рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрд╕ рдореЗрдореЛрд░реА рдбрдВрдк рдХреЛ рдореЗрд░реЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
@erikandre рд╣реАрдк рдбрдВрдк рдЖрдХрд╛рд░ рдореЗрдВ рд▓рдЧрднрдЧ 250mb рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдбреНрд░рд╛рдЗрд╡ рдпрд╛ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ?
@nucleartip рдХреЛрдИ рднреА рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ :)
рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рддрдХ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдореЗрд░реЗ рд╕рд╛рде рднреА рд╡рд╣реА рджрд┐рдХреНрдХрдд рд╣реИред
рдореИрдВрдиреЗ рдПрдХреНрд▓рд┐рдкреНрд╕ рдореЗрдореЛрд░реА рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдореЗрдореЛрд░реА рдбрдВрдк рдХреА рдЬрд╛рдБрдЪ рдХреАред
рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрд╛рдЗрдЯ [] рднреА рджреЗрдЦреЗред
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЬреАрд╕реА рдХреЗ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЛ рдореВрд▓ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдиреЗрдЯрд┐рд╡рдкреВрд▓рдбрдмрд╛рдЗрдЯрдмрдлрд░ рдпрд╛ рдиреЗрдЯрд┐рд╡рдореЗрдорд░реАрдЪрдВрдХред
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╡реЗ com.facebook.common.references.SharedReference.sLiveObjects рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдмреВрдд рдирд╣реАрдВ рд╣реИред
рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд░рд┐рд╣рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛...
рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред
рдореБрдЭреЗ рднреА рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдкрд╡рд╛рдж рдЬрд╛рдирдХрд╛рд░реА рд╣реИ:
E/AndroidRuntime: FATAL EXCEPTION: Thread-5458 Process:
package-name, PID: 4877
java.lang.OutOfMemoryError: Failed to allocate a 2560012 byte allocation with 1782384 free bytes and 1740KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:843)
at android.graphics.Bitmap.createBitmap(Bitmap.java:820)
at android.graphics.Bitmap.createBitmap(Bitmap.java:787)
at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:55)
at com.facebook.imagepipeline.memory.BitmapPool.alloc(BitmapPool.java:30)
at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:260)
at com.facebook.imagepipeline.platform.ArtDecoder.decodeStaticImageFromStream(ArtDecoder.java:137)
at com.facebook.imagepipeline.platform.ArtDecoder.decodeJPEGFromEncodedImage(ArtDecoder.java:120)
at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decodeJpeg(DefaultImageDecoder.java:186)
at com.facebook.imagepipeline.decoder.DefaultImageDecoder$1.decode(DefaultImageDecoder.java:63)
at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decode(DefaultImageDecoder.java:126)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:240)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200(DecodeProducer.java:112)
at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:145)
at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:207)
at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:27)
at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43)
at java.lang.Thread.run(Thread.java:818)
рдУрдУрдПрдо рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕рднреА рдЬреАрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ:
I/art: Starting a blocking GC Alloc
I/art: Starting a blocking GC Alloc
I/art: Alloc sticky concurrent mark sweep GC freed 92215(9MB) AllocSpace objects, 36(660KB) LOS objects, 8% free, 117MB/128MB, paused 1.228ms total 37.123ms
I/art: Starting a blocking GC Alloc
I/art: Starting a blocking GC Alloc
I/art: Waiting for a blocking GC Alloc
I/art: Clamp target GC heap from 188MB to 128MB
I/art: Alloc partial concurrent mark sweep GC freed 45395(2MB) AllocSpace objects, 43(860KB) LOS objects, 3% free, 124MB/128MB, paused 727us total 59.648ms
I/art: WaitForGcToComplete blocked for 25.090ms for cause Alloc
I/art: Starting a blocking GC Alloc
I/art: Starting a blocking GC Alloc
I/art: Starting a blocking GC Alloc
W/art: Suspending all threads took: 5.155ms
I/art: Waiting for a blocking GC Alloc
I/art: Alloc sticky concurrent mark sweep GC freed 2803(277KB) AllocSpace objects, 2(40KB) LOS objects, 0% free, 126MB/128MB, paused 579us total 19.249ms
I/art: Starting a blocking GC Alloc
I/art: Waiting for a blocking GC Alloc
I/art: Alloc sticky concurrent mark sweep GC freed 822(87KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 126MB/128MB, paused 547us total 12.316ms
I/art: WaitForGcToComplete blocked for 11.410ms for cause Alloc
I/art: Starting a blocking GC Alloc
I/art: Waiting for a blocking GC Alloc
I/art: Clamp target GC heap from 190MB to 128MB
I/art: Alloc partial concurrent mark sweep GC freed 4725(241KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 126MB/128MB, paused 658us total 46.759ms
I/art: WaitForGcToComplete blocked for 46.699ms for cause Alloc
I/art: Starting a blocking GC Alloc
I/art: Waiting for a blocking GC Alloc
I/art: Clamp target GC heap from 190MB to 128MB
I/art: Alloc concurrent mark sweep GC freed 801(78KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 126MB/128MB, paused 796us total 40.098ms
I/art: WaitForGcToComplete blocked for 35.773ms for cause Alloc
I/art: Starting a blocking GC Alloc
I/art: Forcing collection of SoftReferences for 2MB allocation
I/art: Waiting for a blocking GC Alloc
I/art: Waiting for a blocking GC Alloc
I/art: Clamp target GC heap from 191MB to 128MB
I/art: Alloc concurrent mark sweep GC freed 3661(366KB) AllocSpace objects, 1(20KB) LOS objects, 0% free, 127MB/128MB, paused 634us total 61.758ms
I/art: WaitForGcToComplete blocked for 60.363ms for cause Alloc
I/art: Starting a blocking GC Alloc
I/art: Waiting for a blocking GC Alloc
W/art: Suspending all threads took: 38.816ms
/I/art: Forcing collection of SoftReferences for 2MB allocation
/I/art: Waiting for a blocking GC Alloc
/I/art: Clamp target GC heap from 190MB to 128MB
/I/art: Alloc concurrent mark sweep GC freed 214(8KB) AllocSpace objects, 1(416KB) LOS objects, 0% free, 126MB/128MB, paused 876us total 42.655ms
/I/art: WaitForGcToComplete blocked for 82.057ms for cause Alloc
/I/art: Starting a blocking GC Alloc
/I/art: Starting a blocking GC Alloc
/W/art: Throwing OutOfMemoryError "Failed to allocate a 2560012 byte allocation with 1643888 free bytes and 1605KB until OOM"
/I/art: Waiting for a blocking GC Alloc
/I/art: Clamp target GC heap from 190MB to 128MB
/I/art: Alloc concurrent mark sweep GC freed 12633(1496KB) AllocSpace objects, 0(0B) LOS objects, 1% free, 126MB/128MB, paused 684us total 43.271ms
/I/art: WaitForGcToComplete blocked for 136.549ms for cause Alloc
/I/art: Starting a blocking GC Alloc
/I/art: Waiting for a blocking GC Alloc
/I/art: Waiting for a blocking GC Alloc
/I/art: Forcing collection of SoftReferences for 2MB allocation
/I/art: Waiting for a blocking GC Alloc
/I/art: Clamp target GC heap from 190MB to 128MB
/I/art: Alloc concurrent mark sweep GC freed 2239(265KB) AllocSpace objects, 0(0B) LOS objects, 1% free, 126MB/128MB, paused 1.282ms total 40.182ms
/I/art: WaitForGcToComplete blocked for 120.837ms for cause Alloc
/I/art: Starting a blocking GC Alloc
/I/art: Waiting for a blocking GC Alloc
/I/art: Waiting for a blocking GC Alloc
/I/art: Forcing collection of SoftReferences for 2MB allocation
/I/art: Waiting for a blocking GC Alloc
/W/art: Suspending all threads took: 30.572ms
/I/art: Clamp target GC heap from 190MB to 128MB
/I/art: Alloc concurrent mark sweep GC freed 7(1264B) AllocSpace objects, 0(0B) LOS objects, 1% free, 126MB/128MB, paused 2.697ms total 43.668ms
/I/art: WaitForGcToComplete blocked for 129.040ms for cause Alloc
/I/art: Starting a blocking GC Alloc
/I/art: WaitForGcToComplete blocked for 83.495ms for cause Alloc
/I/art: Starting a blocking GC Alloc
/I/art: Waiting for a blocking GC Alloc
/W/art: Throwing OutOfMemoryError "Failed to allocate a 2560012 byte allocation with 1782384 free bytes and 1740KB until OOM"
/I/art: Waiting for a blocking GC Alloc
/I/art: Waiting for a blocking GC Alloc
1 рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдореЗрдВ Viewpager + RecyclerView рдкреЗрдЬ рдЦреЛрд▓реЗрдВ:
рд▓рдЧрднрдЧ 20 рдЪрд┐рддреНрд░ рд╣реИрдВред
2 рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рд▓реЗ рджреЛ рдореЗрдВ рдПрдХ рд╡реНрдпреВрдкреЗрдЬрд░ + рд░реАрд╕рд╛рдЗрдХреНрд▓рд░ рд╡реНрдпреВ рдкреЗрдЬ рдЦреЛрд▓реЗрдВ:
рд▓рдЧрднрдЧ рекреж рдЪрд┐рддреНрд░ рд╣реИрдВ, рдкреЗрдЬрд░ рдХреЗ рджреЛрдиреЛрдВ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рд╡реНрдпреВрдкреЗрдЬрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рейреж рдЪрд┐рддреНрд░ рд╣реИрдВред
3 рджреБрд░реНрдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж:
рдореИрдВ рдЗрд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЗрдЦрддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рд░реИрдо рд╡рд╛рд▓реЗ рдирдП рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ред рдпрд╣ рдРрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ рдЕрдзрд┐рдХ RAM рдлреНрд░реЗрд╕реНрдХреЛ рдХреЛ OOM рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдмрд╛рд░ рдЦреЗрд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рдореЗрд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ (рдЕрднреА рддрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ (рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЕрдзрд┐рдХрддрдо рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ 0 рдкрд░ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреИрд╢ рдХреЛ рдкреВрд░реА рддрд░рд╣ рдЕрдХреНрд╖рдо рдХрд░ рджреЗрддрд╛ рд╣реВрдВ)ред
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣рдо рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВ?
@mradzinski рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ Glide
рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдорд╛рд░реЗ рдРрдк рдХреЛ рдУрдУрдПрдо рд╕реЗ рдореБрдХреНрдд рдШреЛрд╖рд┐рдд рдХрд░ рджрд┐рдпрд╛ред
@nucleartip рдордЬрд╛рдХрд┐рдпрд╛ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЧреНрд▓рд╛рдЗрдб рд╕реЗ рдлреНрд░реЗрд╕реНрдХреЛ рддрдХ рд╕рдм рдХреБрдЫ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ
рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рдВрдЪ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред
рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЖрдЙрдЯ рдСрдлрд╝ рдореЗрдореЛрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ рдФрд░ рдЕрдзрд┐рдорд╛рдирддрдГ рдПрдХ HPROF рдореЗрдореЛрд░реА рдбрдВрдк рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред
@erikandre
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ OOM рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдУрдУрдПрдо рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдШрдЯрдирд╛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рддрд╛рдХрд┐ рд╣рдо OOM рдЗрд╡реЗрдВрдЯ рдХреЛ рдЦреБрдж рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдВред
@AlexCJW рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@nucleartip рдордЬрд╛рдХрд┐рдпрд╛ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЧреНрд▓рд╛рдЗрдб рд╕реЗ рдлреНрд░реЗрд╕реНрдХреЛ рддрдХ рд╕рдм рдХреБрдЫ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ