onTrimMemory与onLowMemory
我们的Application、Acivity、Service、ContentProvider与Fragment都实现了ComponentCallbacks2接口。
所以能够重写
onTrimMemory与onLowMemory函数。
OnTrimMemory的参数是一个int数值,代表不同的内存状态:
4.1 当我们的应用程序正在运行时:
TRIM_MEMORY_RUNNING_CRITICAL:
系统当前内存紧张,正在运行的进程应该释放非关键资源,来节省内存用于其他地方。如果内存得不到缓解,那么将会接到onLowMemory回调,并且后台进程会被杀死。
TRIM_MEMORY_RUNNING_LOW:
系统当前内存较低,希望能释放一些不使用的资源,来节省内存用于其他地方
TRIM_MEMORY_RUNNING_MODERATE:
系统当前内存情况一般,希望能释放一些不使用的资源,来节省内存用于其他地方
4.0
TRIM_MEMORY_COMPLETE:
该进程在后台进程列表最后一个,如果没有更多可用内存,马上就要被清理。
TRIM_MEMORY_MODERATE:
该进程在后台进程列表的中部,释放更多的内存能帮助系统保持其他后台进程运行更久,提高系统整体性能。
TRIM_MEMORY_BACKGROUND:
该进程进入LRU List,这是一个释放资源的好时机,能让我们的进程更久的存在内存,当用户返回app,能够快速构建,而不是重新创建启动。
TRIM_MEMORY_UI_HIDDEN:
UI不可见了,应该释放占用大量内存的UI数据。
比如说一个Bitmap,我们缓存下来是为了可能的(不一定)再次显示。但是如果接到这个回调,那么还是将它释放掉,如果回到前台,再显示会比较好。
OnLowMemory
这个函数看名字就是低内存。这个函数的回调意味着后台进程已经被干掉了。这个回调可以作为4.0兼容OnTrimMemory的TRIM_MEMORY_COMPLETE来使用
如果希望在其他组件中也能接收到这些回调可以使用上下文的registerComponentCallbacks注册接收,
unRegisterComponentCallbacks反注册