CrackMe.apk
Download file
package com.facebook.imagepipeline.memory;
import android.graphics.Bitmap;
import com.facebook.common.memory.MemoryTrimType;
import com.facebook.common.memory.MemoryTrimmableRegistry;
import javax.annotation.Nullable;
public class LruBitmapPool implements BitmapPool {
private int mCurrentSize;
private int mMaxBitmapSize;
private final int mMaxPoolSize;
private final PoolStatsTracker mPoolStatsTracker;
protected final PoolBackend<Bitmap> mStrategy = new BitmapPoolBackend();
public LruBitmapPool(int i, int i2, PoolStatsTracker poolStatsTracker, @Nullable MemoryTrimmableRegistry memoryTrimmableRegistry) {
this.mMaxPoolSize = i;
this.mMaxBitmapSize = i2;
this.mPoolStatsTracker = poolStatsTracker;
if (memoryTrimmableRegistry != null) {
memoryTrimmableRegistry.registerMemoryTrimmable(this);
}
}
public void trim(MemoryTrimType memoryTrimType) {
trimTo((int) (((double) this.mMaxPoolSize) * (1.0d - memoryTrimType.getSuggestedTrimRatio())));
}
private synchronized void trimTo(int i) {
while (true) {
if (this.mCurrentSize <= i) {
break;
}
Bitmap pop = this.mStrategy.pop();
if (pop == null) {
break;
}
int size = this.mStrategy.getSize(pop);
this.mCurrentSize -= size;
this.mPoolStatsTracker.onFree(size);
}
}
public synchronized Bitmap get(int i) {
int i2 = this.mCurrentSize;
int i3 = this.mMaxPoolSize;
if (i2 > i3) {
trimTo(i3);
}
Bitmap bitmap = this.mStrategy.get(i);
if (bitmap != null) {
int size = this.mStrategy.getSize(bitmap);
this.mCurrentSize -= size;
this.mPoolStatsTracker.onValueReuse(size);
return bitmap;
}
return alloc(i);
}
private Bitmap alloc(int i) {
this.mPoolStatsTracker.onAlloc(i);
return Bitmap.createBitmap(1, i, Bitmap.Config.ALPHA_8);
}
public void release(Bitmap bitmap) {
int size = this.mStrategy.getSize(bitmap);
if (size <= this.mMaxBitmapSize) {
this.mPoolStatsTracker.onValueRelease(size);
this.mStrategy.put(bitmap);
synchronized (this) {
this.mCurrentSize += size;
}
}
}
}
Download file