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);
    }
  }

results matching ""

    No results matching ""