ComponentCallbacks类
ComponentCallbacks类是定义了Configuration
变化和memory变化的回调事件:
public interface ComponentCallbacks {
void onConfigurationChanged(Configuration newConfig);
void onLowMemory();
}
这里的onLowMemory()
的触发是在整个系统运行在低内存的情况下,这个具体的时机并没有明确定义。
在android 14以后,对这个内存的监听进行了优化,引申出了ComponentCallbacks2
来专门的处理内存的事件。
ComponentCallbacks2
的事件类型:
- TRIM_MEMORY_COMPLETE:内存不足,并且当前进程已经是后台LRU进程列表中的最后一个了,如果没有更多的内存出现,进程将被杀死
- TRIM_MEMORY_MODERATE:内存不足,当前进程在后台LRU进程列表的中间位置,释放当前进程的内存会让后面的进程有更好的性能表现
- TRIM_MEMORY_BACKGROUND:内存不足,当前进程已经在后台LRU进程列表中了,这个时候清理资源,当用户再返回来的时候会更加快速
- TRIM_MEMORY_UI_HIDDEN:进程已经不再展现给用户,已经不再有任何的操作。大的UI内存分配可以在这个时候释放,从而有更好的内存表现
- TRIM_MEMORY_RUNNING_CRITICAL:当前进程还在运行中,但是设备的内存已经很低了,并且可能将不保持后台运行的进程了,所以当前应用应该尽可能的释放非必须的资源
- TRIM_MEMORY_RUNNING_LOW:当前进程还在运行中,但是设备的内存已经比较低了,所以应该释放无用资源以提高系统性能,当前的低内存已经影响到你的app体验了
- TRIM_MEMORY_RUNNING_MODERATE:当前进程还在运行中,设备开始出现低内存的情况,建议释放不必要的资源
为什么要详细说明这些字段?
因为程序可以根据不同的情况进行不同的内存回收的处理。而Glide的源码中也是秉承了这一点:
@Override
public synchronized void trimMemory(int level) {
if (level >= android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND) {
clearMemory();
} else if (level >= android.content.ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
evictToSize(maxSize / 2);
}
}