0


Android 中的onTrimMemory

onTrimMemory

是 Android 中的一个回调方法,用于帮助应用在系统内存紧张时进行内存管理和优化。这个方法定义在

ComponentCallbacks2

接口中,几乎所有的应用组件(如

Activity

Service

Application

)都实现了这个接口,因此你可以在这些组件中重写该方法。

onTrimMemory

方法详解

方法定义
@OverridepublicvoidonTrimMemory(int level){super.onTrimMemory(level);// 根据 level 处理内存优化逻辑}
参数
  • level:一个整数,表示系统内存的紧张程度。可以是以下值之一:

内存级别常量

TRIM_MEMORY_COMPLETE
  • :15
  • 说明:系统处于低内存状态,正在运行的进程将被清理。应该尽可能释放所有不必要的资源。
TRIM_MEMORY_MODERATE
  • :10
  • 说明:系统内存不足,后台进程可能会被杀死。释放中等优先级的资源。
TRIM_MEMORY_BACKGROUND
  • :40
  • 说明:应用不在前台运行,应该释放容易恢复的资源。
TRIM_MEMORY_UI_HIDDEN
  • :20
  • 说明:应用的所有 UI 都不可见。释放与 UI 相关的资源。
TRIM_MEMORY_RUNNING_CRITICAL
  • :15
  • 说明:系统内存极低,正在运行的进程面临被杀死的风险。释放所有不必要的资源。
TRIM_MEMORY_RUNNING_LOW
  • :10
  • 说明:系统内存较低,释放一些非必要资源。
TRIM_MEMORY_RUNNING_MODERATE
  • :5
  • 说明:系统内存充足但不多。可以考虑释放一些资源。

优化策略

在不同的内存级别下,应用可以采取不同的优化策略,以减少内存使用:

1. TRIM_MEMORY_COMPLETE 和 TRIM_MEMORY_RUNNING_CRITICAL
  • 策略:释放所有不必要的内存,包括缓存、Bitmap、数据库连接等。@OverridepublicvoidonTrimMemory(int level){super.onTrimMemory(level);if(level >=ComponentCallbacks2.TRIM_MEMORY_COMPLETE){clearCache();releaseBitmaps();closeDatabaseConnections();}}privatevoidclearCache(){// 清理缓存}privatevoidreleaseBitmaps(){// 释放 Bitmap 资源}privatevoidcloseDatabaseConnections(){// 关闭数据库连接}
2. TRIM_MEMORY_MODERATE 和 TRIM_MEMORY_RUNNING_LOW
  • 策略:释放中等优先级的资源,如一些缓存数据、临时对象等。@OverridepublicvoidonTrimMemory(int level){super.onTrimMemory(level);if(level >=ComponentCallbacks2.TRIM_MEMORY_MODERATE){clearSomeCache();}}privatevoidclearSomeCache(){// 清理部分缓存数据}
3. TRIM_MEMORY_BACKGROUND 和 TRIM_MEMORY_UI_HIDDEN
  • 策略:释放与 UI 相关的资源,如不再显示的 View、Activity 等。@OverridepublicvoidonTrimMemory(int level){super.onTrimMemory(level);if(level ==ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN){releaseUIResources();}}privatevoidreleaseUIResources(){// 释放 UI 相关资源}
4. TRIM_MEMORY_RUNNING_MODERATE
  • 策略:可以适当释放一些资源,但不必过于激进。@OverridepublicvoidonTrimMemory(int level){super.onTrimMemory(level);if(level ==ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE){releaseModerateResources();}}privatevoidreleaseModerateResources(){// 释放中等程度的资源}

示例:在

Application

中实现

onTrimMemory
publicclassMyAppextendsApplication{@OverridepublicvoidonTrimMemory(int level){super.onTrimMemory(level);switch(level){caseComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN:// 释放与 UI 相关的资源releaseUIResources();break;caseComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW:caseComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL:// 释放一些缓存资源clearCache();break;caseComponentCallbacks2.TRIM_MEMORY_COMPLETE:// 释放所有不必要的资源clearAllResources();break;default:// 其他级别的处理break;}}privatevoidreleaseUIResources(){// 释放与 UI 相关的资源}privatevoidclearCache(){// 清理缓存}privatevoidclearAllResources(){// 释放所有不必要的资源}}

最佳实践

  • 优先释放缓存数据:缓存数据通常是容易恢复的,因此可以优先考虑释放缓存。
  • 避免不必要的对象持有:确保不再需要的对象能够被垃圾回收,避免长时间持有不必要的对象。
  • 延迟加载资源:对于一些大资源(如图片、视频),可以使用延迟加载的方式,仅在需要时加载,使用后尽早释放。

通过合理使用

onTrimMemory

方法,可以有效减少应用的内存占用,提升系统的整体性能和稳定性。


本文转载自: https://blog.csdn.net/github_35942716/article/details/140741721
版权归原作者 彬_小彬 所有, 如有侵权,请联系我们删除。

“Android 中的onTrimMemory”的评论:

还没有评论