onTrimMemory
onTrimMemory是Android系统提供给应用程序的一个回调方法,位于ComponentCallbacks2接口中,主要用于帮助应用程序管理其内存使用。当系统的整体内存情况发生变化时,系统会调用此方法通知应用程序,使得应用程序能够根据当前内存状况采取相应的措施来释放不再需要的内存资源。这对于维护应用程序的稳定性和提升用户体验至关重要,尤其是在内存资源紧张的情况下。
onTrimMemory方法接受一个整型参数level,该参数代表了当前内存紧张的程度,不同的level值对应不同的内存状态,开发者可以根据这些level做出不同程度的内存释放操作。以下是几个常见的level值及其意义:
- TRIM_MEMORY_UI_HIDDEN(20):应用的UI已不可见,比如被home键切换到了后台,这时可以考虑释放与UI相关的资源。
- TRIM_MEMORY_RUNNING_MODERATE(5):系统内存稍显紧张,但应用仍在正常运行状态,可能需要准备释放非关键资源。
- TRIM_MEMORY_RUNNING_LOW(10):系统内存变得相当紧张,应用虽未被选中杀死,但应积极释放可被重创建的资源。
- TRIM_MEMORY_RUNNING_CRITICAL(15):系统内存极其紧张,已经或即将开始杀死进程以回收内存,应用应立即释放所有非必需资源。
- TRIM_MEMORY_BACKGROUND(40)、TRIM_MEMORY_COMPLETE(80)等其他级别,分别对应应用处于后台的不同内存压力状态,要求不同程度地释放内存。
通过实现并合理响应onTrimMemory回调,应用程序能够在不同内存压力下更加智能和高效地管理自己的内存占用,避免因内存不足导致的系统强制关闭进程,从而提升应用的稳定性和用户体验。
onLowMemory
onLowMemory是较早时期Android系统提供给应用程序的内存管理回调方法,它位于ComponentCallbacks接口中。当系统的整体内存非常低且需要更多内存来维持前台应用的运行时,系统会调用所有注册了此接口组件的onLowMemory方法。与onTrimMemory相比,onLowMemory的触发条件更为严格,通常只在系统内存极度匮乏的情况下才会被调用。
当onLowMemory被触发时,应用程序应当释放所有不必要的内存资源,包括那些可能被重新创建或恢复的数据。这是因为此时系统正面临内存分配的临界点,可能会开始终止后台进程来确保前台应用的正常运行。因此,接收到onLowMemory回调时,应用程序应当采取紧急措施来减少内存占用,以避免被系统视为一个内存消耗大户而被终结。
简而言之,onLowMemory是一个更旧且更紧急的内存警告机制,提示应用程序应当立即释放内存以避免被系统终止。随着Android系统的进化,onTrimMemory提供了更细粒度的内存管理机制,但在某些场景或老版本系统中,正确处理onLowMemory仍然是必要的。
coil内存管理
1. onLowMemory
override fun onLowMemory() {
super.onLowMemory()
imageLoader?.memoryCache?.clear()
}
2. onTrimMemory
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
imageLoader?.memoryCache?.trimMemory(level)
}
Glide内存管理
1. onLowMemory
override fun onLowMemory() {
super.onLowMemory()
Glide.get(this).onLowMemory()
}
2. onTrimMemory
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
Glide.get(this).onTrimMemory(level)
}