Android内存泄漏检测-LeakCanary
来源:互联网 发布:verilog数据选择器 编辑:程序博客网 时间:2024/05/24 01:38
square/leakcanary
udacity/Sunshine-Version-2
添加LeakCanary依赖包
在主模块app下的build.gradle下添加如下依赖:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
开启LeakCanary
添加Application子类
首先创建一个ExampleApplication,该类继承于Application,在该类的onCreate方法中添加如下代码开启LeakCanary监控:
LeakCanary.install(this);
在配置文件中注册ExampleApplication
在AndroidManifest.xml
中的application
标签中添加如下信息:
android:name=".ExampleApplication"
这个时候安装应用到手机,会自动安装一个Leaks应用,如下图:
制造一个内存泄漏的点
建立一个ActivityManager
类,单例模式,里面有一个数组用来保存Activity
:
package com.example.android.sunshine.app;import android.app.Activity;import android.util.SparseArray;import android.view.animation.AccelerateInterpolator;import java.util.List;/** * Created by wuxian on 15/10/23. */public class ActivityManager { private SparseArray<Activity> container = new SparseArray<Activity>(); private int key = 0; private static ActivityManager mInstance; private ActivityManager(){} public static ActivityManager getInstance(){ if(mInstance == null){ mInstance = new ActivityManager(); } return mInstance; } public void addActivity(Activity activity){ container.put(key++,activity); }}
然后在DetailActivity
中的onCreate
方法中将当前activity
添加到ActivityManager
的数组中:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); ActivityManager.getInstance().addActivity(this); if (savedInstanceState == null) { // Create the detail fragment and add it to the activity // using a fragment transaction. Bundle arguments = new Bundle(); arguments.putParcelable(DetailFragment.DETAIL_URI, getIntent().getData()); DetailFragment fragment = new DetailFragment(); fragment.setArguments(arguments); getSupportFragmentManager().beginTransaction() .add(R.id.weather_detail_container, fragment) .commit(); } }
我们从首页跳转到详情页的时候会进入DetailActivity
的onCreate
的方法,然后就将当前activity
添加到了数组中,当返回时,我们没把他从数组中删除。再次进入的时候,会创建新的activity
并添加到数组中,但是之前的activity
仍然被引用,无法释放,但是这个activity
不会再被使用,这个时候就造成了内存泄漏。我们来看看LeakCanary
是如何报出这个问题的。
演示
解析的过程有点耗时,所以需要等待一会才会在Leaks应用中,当我们点开某一个信息时,会看到详细的泄漏信息:
1 2
- Android内存泄漏检测-LeakCanary
- Android内存泄漏检测-LeakCanary
- Android-LeakCanary检测内存泄漏
- android LeakCanary检测内存泄漏
- leakcanary 检测内存泄漏
- leakcanary 检测内存泄漏
- Android检测内存泄漏之leakcanary
- Android内存泄漏检测利器:LeakCanary
- LeakCanary:检测Android中的内存泄漏
- Android内存泄漏检测利器:LeakCanary
- Android内存泄漏检测利器:LeakCanary
- Android内存泄漏检测利器:LeakCanary
- Android中LeakCanary检测内存泄漏
- Android中LeakCanary检测内存泄漏
- Android内存泄漏检测利器:LeakCanary
- 用 LeakCanary 检测内存泄漏
- 使用LeakCanary检测内存泄漏
- 内存泄漏的检测;leakCanary
- iOS开发必备--环境变量配置(Debug & Release)
- 魅族手机 取消下拉悬停 解决方法
- iOS-如何使用symbolicatecrash
- Android系统联系人全特效实现
- org.apache.log4j.Logger详解
- Android内存泄漏检测-LeakCanary
- FIFA 16 comes in with FIFA trainer that will try
- 实习日志-第3天
- OnGlobalLayoutListener获得一个视图的高度
- C++ 虚函数与纯虚函数的区别
- 设计概念澄清
- 黑马程序员——反射Constructor类
- ubuntu14全屏设置
- JAVA基础知识之冒泡排序