Android 系统提供了 ComponentCallbacksComponentCallbacks2 这两个接口让开发者去监听 App 的内存变化 ,其中 ComponentCallbacks2 仅可用于 Api 14 以上的版本。
我们可以在 ApplicationActiviyServiceContentProvider 中重写接口方法来实现内存变化的监听。

ComponentCallbacks2

该接口仅支持 Api 14 以上的版本,是 ComponentCallbacks 的子类,它里面就一个方法和一个源码注解:

public interface ComponentCallbacks2 extends ComponentCallbacks {    /** @hide */    @IntDef(prefix = { "TRIM_MEMORY_" }, value = {            TRIM_MEMORY_COMPLETE,            TRIM_MEMORY_MODERATE,            TRIM_MEMORY_BACKGROUND,            TRIM_MEMORY_UI_HIDDEN,            TRIM_MEMORY_RUNNING_CRITICAL,            TRIM_MEMORY_RUNNING_LOW,            TRIM_MEMORY_RUNNING_MODERATE,    })    @Retention(RetentionPolicy.SOURCE)    public @interface TrimMemoryLevel {}    ..........    void onTrimMemory(@TrimMemoryLevel int level);

onTrimMemory 可以拿到当前内存状态的数据,而 TrimMemoryLevel 注解给内存状态设置了详情的等级,我们来一个一个说明这些等级含义:
App在后台运行时的 level:

TRIM_MEMORY_COMPLETE(80):App 位于后台AppLRU队列尾端,如果app不释放更多内存将会给系统杀死TRIM_MEMORY_MODERATE(60):App 位于后台AppLRU队列中间位置,应该合理释放更多内存降低给系统杀死的风险TRIM_MEMORY_BACKGROUND(40):App 刚进入后台AppLRU队列,应该合理释放更多内存降低给系统杀死的风险TRIM_MEMORY_UI_HIDDEN(20):App 已经切换到后台,用户已经看不到 app 的 UI ,建议释放一些 UI 资源

App 切换到后台后,如果长时间不唤醒就会进入到后台运行的 LRU 队列中,直到最后给系统杀死。

App在前台运行时的 level:

TRIM_MEMORY_RUNNING_CRITICAL(15):App 在前台运行,但是内存紧张,应合理去释放资源避免 OOMTRIM_MEMORY_RUNNING_LOW(10):App 在前台运行,但是内存很紧张,应合理去释放资源避免 OOMTRIM_MEMORY_RUNNING_MODERATE(5):App 在前台运行,但是内存非常紧张,,应合理去释放资源避免 OOM

通过 onTrimMemory 方法了解内存的情况就可以及时释放一些不必要的资源,让 App 存活时间更长。

ComponentCallbacks

public interface ComponentCallbacks {    void onConfigurationChanged(Configuration newConfig);    void onLowMemory();}

该接口里面有两个方法,不过现在我们来重点关注里面的 onLowMemory .
onLowMemory 在 App 切换到后台,内存紧张时的回调(此时内存状态等级为 TRIM_MEMORY_COMPLETE ),对比上面的 onTrimMemory 方法,它并没有那么多的具体的等级数据,但是这个方法可以兼容到 Api 14 以下,建议最好在这两个方法里面都写上释放资源的方法。

更多相关文章

  1. android bitmap内存溢出
  2. 正在学习 android 开发,开发环境已搭建完毕,第一个测试程序已在模
  3. Android(安卓)解析如何获取SDCard 内存
  4. Android解析如何获取SDCard 内存
  5. Android(安卓)pmem分析
  6. Android(安卓)在Coding中防止内存泄漏——LeakCanary
  7. Android(安卓)Native Crash的log分析和定位
  8. SharedPerferences的使用
  9. Android内存情况

随机推荐

  1. Android中有关Handler的总结
  2. Android(安卓)系列的光照效果
  3. android 获取 mac 以及device id
  4. 写个跟android有关的xml解析
  5. android 标题栏布局
  6. Android学习路线(二十六)Android数据存储
  7. 相对布局属性详解
  8. 【Parse】开发笔记(4)—— Push Notificati
  9. Android 风格和主题
  10. Android BLE 开发常见问题总结