Android内存监听的方法
16lz
2021-01-26
Android 系统提供了
ComponentCallbacks
和ComponentCallbacks2
这两个接口让开发者去监听 App 的内存变化 ,其中ComponentCallbacks2
仅可用于 Api 14 以上的版本。
我们可以在Application
,Activiy
,Service
和ContentProvider
中重写接口方法来实现内存变化的监听。
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 以下,建议最好在这两个方法里面都写上释放资源的方法。
更多相关文章
- android bitmap内存溢出
- 正在学习 android 开发,开发环境已搭建完毕,第一个测试程序已在模
- Android(安卓)解析如何获取SDCard 内存
- Android解析如何获取SDCard 内存
- Android(安卓)pmem分析
- Android(安卓)在Coding中防止内存泄漏——LeakCanary
- Android(安卓)Native Crash的log分析和定位
- SharedPerferences的使用
- Android内存情况