内存无法回收
Glide 默认是会将加载的资源缓存到内存里,GC 无法回收。
所以如果不需要缓存到内存的情况下,需要跳过缓存
Glide.load(item.thumbnail)
//跳过磁盘缓存
.diskCacheStrategy(DiskCacheStrategy.NONE)
//跳过内存缓存
.skipMemoryCache(true)
例子
Android Studio Profiler 看 .hprof文件
Class Name:对象的类型,比如byte[]就是说这里的对象都是byte数组类型;
Allocations:生成对象的数量
Shallow Size:这些对象所占用的内存(不包括引用对象),单位是B。
这里就是198个 Bitmap 对象所占的内存,9900 B 但是不包括引用的对象
Retained Size:这些对象所占用内(包括引用对象),内存释放时,实际释放的大小就是这里的大小;
有两个对象,对象A的大小是20kb,对象B的大小是10kb,对象B是对象A的成员变量,那么:
Class Name:A Allocations:2 Shallow Size:2*20*1024 Retained Size:2*20*1024+2*10*1024
Class Name:B Allocations:1 Shallow Size:10*1024 Retained Size:10*1024
查看 Reference 引用链,可以看到这个BitMap对象是被谁引用了。
点击Go To Instance 可以看到引用它的地方。
点击 Jump To Source 可以看到代码引用的地方,最终可以看到时壁纸缩略图引用无法回收。
发现加载的地方,使用了Glide。
Glide 默认会将load 的资源缓存到内存里,需要加上 .skipMemoryCache(true)