美文网首页Android开发
Android内存优化 -- 内存管理 onTrimMemory

Android内存优化 -- 内存管理 onTrimMemory

作者: Passon_Fang | 来源:发表于2018-02-07 16:08 被阅读86次

    原文地址: https://mp.weixin.qq.com/s?__biz=MzIxNjc0ODExMA==&mid=2247484311&idx=1&sn=1fe0416bed4137dd45c6e9c153bb14f4&chksm=97851ab6a0f293a0cde28ff6d1091b2232e1758e9845a05549d01c62f412def742985d642630&scene=21#wechat_redirect

    前言

    LowMemoryKiller 策略:App 退出到后台之后不占用 cpu 资源但是任然会占用内存空间。当系统内存不足的时候,会按照优先级清理进程。

    App 将内存使用降低可以提高优先级,实现不被系统回收的功能。

    onTrimMemory

    作用

    通过 onTrimMemory 实现对 App 内存的简单管理。

    onTrimMemory:Android 4.0 之后提供的 API,作用是提醒开发者系统内存不足了。

    public void onTrimMemory(int level)
    

    onTrimmemory 参数的意义

    • TRIM_MEMORY_UI_HIDDEN:App 的所有 UI 界面被隐藏,最常见的就是 App 被 home 键或者 back 键,置换到后台了。
    • TRIM_MEMORY_RUNNING_MODERATE:表示 App 正常运行,并且不会被杀掉,但是目前手机内存已经有点低了,系统可能会根据 LRU List 来开始杀进程。
    • TRIM_MEMORY_RUNNING_LOW:表示 App正常运行,并且不会被杀掉。但是目前手机内存已经非常低了。
    • TRIM_MEMORY_RUNNING_CRITICAL:表示 App 正在正常运行,但是系统已经开始根据 LRU List 的缓存规则杀掉了一部分缓存的进程。这个时候应该尽可能的释放掉不需要的内存资源,否者系统可能会继续杀掉其他缓存中的进程。
    • TRIM_MEMORY_BACKGROUND:表示 App 退出到后台,并且已经处于 LRU List 比较靠后的位置,暂时前面还有一些其他的 App 进程,暂时不用担心被杀掉
    • TRIM_MENORY_MODERATE:表示 App 退出到后台,并且已经处于 LRU List 中间的位置,如果手机内存仍然不够的话,还是有被杀掉的风险的。
    • TRIM_MEMORY_COMPLETE:表示 App 退出到后台,并且已经处于 LRU List 比较考靠前的位置,并且手机内存已经极低,随时都有可能被系统杀掉。

    level 分三类:

    1. UI 在后台
    2. App 在前台运行
    3. App 在后台,在 Cached 状态下

    哪些组件可以监听 onTrimMemory

    • Application
    • Activity
    • Fragment
    • Service
    • ContentProvider

    通常会在 Application 中监听

    自定义 noTrimMemory 监听

        public void registerComponentCallbacks() {
            synchronized (mTrimMemoryCallback) {
                this.registerComponentCallbacks(mTrimMemoryCallback);
            }
        }
    
        public void unregisterComponentCallbacks() {
            synchronized (mTrimMemoryCallback) {
                this.unregisterComponentCallbacks(mTrimMemoryCallback);
            }
        }
    
        public ComponentCallbacks2 mTrimMemoryCallback = new ComponentCallbacks2(){
    
            @Override
            public void onConfigurationChanged(Configuration newConfig) {
    
            }
    
            @Override
            public void onLowMemory() {
    
            }
    
            @Override
            public void onTrimMemory(int level) {
                
            }
        };
    

    onTrimMemory 的一些思考

    通过这个实现 应用退到后台 的事件捕获

    相关文章

      网友评论

        本文标题:Android内存优化 -- 内存管理 onTrimMemory

        本文链接:https://www.haomeiwen.com/subject/ykhazxtx.html