Android LeakCanary 学习

news/2024/7/4 13:06:38

学习内容来自文章:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0511/2861.html
为了学习,自己又徒手实现了一遍

1.AS中添加 依赖项

  debugImplementation  'com.squareup.leakcanary:leakcanary-android:1.3'
  releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'

2.创建 Application 子类

public class MyApplication extends Application {
    private RefWatcher mRefWatcher;
    public MyApplication() {
        super();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mRefWatcher = LeakCanary.install(this);
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
    }
}

3.AndroidManifest.xml文件中添加Application name

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        ......
</application>

4.自定义类并实现单利模式

public class MyClass {
    private static MyClass instance = null;
    private Context context = null;
    private TextView mTextView;

    public static MyClass getInstance(Context context){

        if(instance == null){
            instance = new MyClass(context);
        }
        return  instance;
    }

    private MyClass(Context context){
        this.context = context;
    }

    private MyClass(){
    }

    public void setRetainedTextView(TextView tv){
        this.mTextView = tv;
        mTextView.setText(context.getString(android.R.string.ok));
    }
}

5.实现MainActivity

public class MainActivity extends AppCompatActivity {
    private RefWatcher mRefWatcher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = (TextView) findViewById(R.id.tv_test);
        MyClass.getInstance(this).setRetainedTextView(tv);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

运行代码,按返回键会出现程序内存泄露对应的图标

这里写图片描述

内容简单,入门学习


http://www.niftyadmin.cn/n/1390323.html

相关文章

ListView原理与优化

一&#xff0e;原理&#xff1a;ListView是个组合列表控件。也就是它不象TextView那样&#xff0c;不依赖于别的控件&#xff0c;直接用textView.setText()方法就可以显示数据&#xff0c;而ListView是不可以这样显示数据的。它是以MVC模式来显示数据的&#xff0c;添加数据时&…

iscroll滑动区域内的div onclick事件单击一次触发了两次bug解决

1、自己写一个fn-->myclick&#xff0c;然后οnclick"myclick();"调用。代码&#xff1a;JavaScript code?123456789101112131415var t1 null;//这个设置为全局function myclick(){if (t1 null){t1 new Date().getTime();}else{ var t2 new Date().get…

[转载]Sublime Text 2支持GB2312和GBK,解决中文显示乱码问题

Sublime Text 2是一个非常不错的源代码及文本编辑器&#xff0c;但是不支持GB2312和GBK编码在很多情况下会非常麻烦。不过Sublime Package Control所以供的插件可以让Sublime Text 2几乎完美地支持CJK编码的文本。 安装Sublime Package Control非常简单&#xff0c;在Sublime T…

Android SqlLite 学习

今天学习了Android SqlLite 一些知识&#xff0c;记录下 一、使用SQLiteDatabase方法一&#xff1a; 1.创建数据库 SQLiteDatabase db SQLiteDatabase.openOrCreateDatabase("databasename.db",MODE_PRIVATE,null); 2.创建表 String sql"create table st…

DAO设置模式

区分&#xff1a; J2EE的组件层次&#xff1a; 客户端---表示层---业务层---数据层---数据库---数据库 DAO属于数据层的操作&#xff0c;即&#xff1a;在DAO中封装了一个表在项目中的多有的操作 举例&#xff1a; person表 id name password age 定义各种操作: 在java中只有通…

中继器的使用

目的显示&#xff0c;姓名对应的年龄 1、 2、设定数据源 3、拖入2个Label组件&#xff0c;分别命名为lbl_name、lal_age&#xff0c;显示姓名、年龄。 4、把数据、和视图练习起来。相当于MVC的C,控制跳转。 最后&#xff0c;F5运行 本文转载自SharkBin博客园博客&#xff0c;原…

用JS有效解决移动web浏览器中HTML元素的overflow:scroll滚动属性失效问题

web移动平台前端UI开发工作&#xff0c;兼容问题超多&#xff0c;今儿又遇到一个。产品方要求在某固定尺寸容器内显示内容&#xff0c;但内容条数未知&#xff1b;如果条数过多&#xff0c;容器显示滚动条。这鸟需求按说是So easy&#xff0c;容器设死宽、高&#xff0c;CSS加属…

Flex练习:写一个五子连珠游戏 Five And More

注意&#xff1a;火狐和谷歌浏览器看不到效果,是因为在博客中&#xff0c;一些脚本无法配置&#xff0c;和Flex的兼容性无关 玩法&#xff1a;先选择棋盘中的一个棋子&#xff0c;然后点击你想移动到的空格&#xff0c;五个同样颜色在一条线上就可以消去。玩一把试试吧&#xf…