Android Studio内存泄露分析

作者: stefanli | 来源:发表于2016-03-15 16:04 被阅读377次

    从Eclipse转移到Android Studio,性能分析以及内存分析那一套都需要跟着转移,这里主要介绍使用Android Studio分析内存泄露情况。

    首先创建一个Android应用,构造一个简单的内存泄露场景:

    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            CommonUtil.getInstance(this);
        }
    }
    
    public class CommonUtil {
        private static CommonUtil mInstance;
        private Context mContext;
        private CommonUtil(Context context) {
            mContext = context;
        }
    
        public static CommonUtil getInstance(Context context) {
            if (mInstance == null) {
                mInstance = new CommonUtil(context);
            }
            return mInstance;
        }
    }
    

    很显然,这个地方因为单例咬住了MainActivity的引用,单例生命周期同进程生命周期,所以这个地方会出现内存泄露。

    然后打开Android Studio -> Android Monitor -> Memory,进入应用再返回桌面,一次或多次操作,然后点击GC,再dump出堆栈文件。


    dump出的.hprof文件在Captures目录下,点开文件可以看到相应的内存信息,但个人觉得这里的信息并不方便分析内存泄露问题,我们可以右键点击文件,导出标准的.hprof文件(必须转换,不然独立版本的MAT识别不了)

    最后下载MAT,导入.hprof文件,愉快的开始分析内存,因为是用android studio开发,这里选择Stand-alone Eclipse RCP Applications版本,独立运行,不依赖于Eclipse。

    接下来,我们看到的就是很熟悉的界面了,通过包名筛选,没有被回收的对象一目了然:

    可以看到,MainActivity对象并没有被回收,的确出现了内存泄露,具体的MAT使用方法再另行分析。

    相关文章

      网友评论

        本文标题:Android Studio内存泄露分析

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