美文网首页
Android性能优化之内存泄漏排查

Android性能优化之内存泄漏排查

作者: 光sail | 来源:发表于2022-01-21 18:35 被阅读0次

    1.内存泄漏

    字面理解:内存泄漏出去了?真正含义:没有用的内存释放不掉。

    2.代码演示

    通过demo代码,记录Memory Profiler 排查内存泄漏使用

    public class UserManger {
    
        private static UserManger instance;
    
        private Context context;
    
        private UserManger(Context context) {
            this.context = context;
        }
    
        public static UserManger getInstance(Context context) {
            if (instance == null) {
                instance = new UserManger(context);
            }
            return instance;
        }
    
        public void destory() {
            context = null;
        }
    }
    
    public class ImageActivity extends Activity {
        private ImageView imageView;
        private UserManger userManger;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            imageView = new ImageView(this);
            imageView.setBackgroundResource(R.mipmap.ic_launcher);
            setContentView(imageView);
           userManger = UserManger.getInstance(this);
        }
    
        @Override
        public void onBackPressed() {
            super.onBackPressed();
      //userManger.destory();
       }
     
    }
    
    image.png

    内存泄漏检查步骤:启动上图红色profiler‘app’ ,点击进入ImageActivity页面后,按后退键关闭ImageActivity,点击MEMORY进入内存使用页面。

    有内存泄漏的显示结果:
    点击下图红色按钮 jump java heap

    image.png
    生成下图1表示退出ImageActivity后,ImageActivity类中的变量产生1个内存泄漏 图1

    没内存泄漏后的显示结果:
    如果在onBackPressed调用userManger.destory()方法,而destory()方法里已经释放ImageActivity 对象,再进行上述内存泄漏检查步骤,进行内存泄漏检查,结果变回如图3显示已无内存泄漏

    @Override
        public void onBackPressed() {
            super.onBackPressed();
            userManger.destory();
       }
    
    图3

    相关文章

      网友评论

          本文标题:Android性能优化之内存泄漏排查

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