LeakCanary使用
来源:互联网 发布:电脑编程有学校吗 编辑:程序博客网 时间:2024/05/14 20:19
一·概述
首先说一下内存泄露有什么影响:
二.使用
下面看看如何使用leakcanary
首先在gradle文件中引入相关库
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
然后在全局Application中进行配置
public class MyApplication extends Application { private RefWatcher mRefWatcher; @Override public void onCreate() { super.onCreate(); mRefWatcher = LeakCanary.install(this); } public static RefWatcher getRefWatcher(Context context){ MyApplication mApp = (MyApplication) context.getApplicationContext(); return mApp.mRefWatcher; }}
使用RefWatcher观察Fragment的内存泄露
public abstract class BaseFragment extends Fragment { @Override public void onDestroy() { super.onDestroy(); RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity()); refWatcher.watch(this); }}
上传至服务器
public class LeakUploadService extends DisplayLeakService{ @Override protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) { super.afterDefaultHandling(heapDump, result, leakInfo); if(!result.leakFound||result.excludedLeak){ return; } //然后上传我们的文件 UploadUtil.uploadFile(heapDump.heapDumpFile,"服务器地址"); }}
在正式发布的应用中使RefWatcher失效
mRefWatcher = RefWatcher.DISABLED;
三.实例
下面我们用leakcanary来检测一下内存泄漏,看看到底行不行
代码如下
public class MainActivity extends AppCompatActivity { private TextView textViewShowMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View view){ Toast.makeText(this, "启动", Toast.LENGTH_SHORT).show(); new Thread(){ @Override public void run() { super.run(); SystemClock.sleep(10000); } }.start(); }}
当我们让线程运行起来以后,然后旋转屏幕,很明显上面的代码会产生内存泄露,因为Activity虽然销毁了,但是Thread类持有外部类的引用,产生了内存泄漏。
这时候通知栏会出现一个提示,
我们点开通知
可以看到泄露信息。这就是leakcanary的使用,总结一下,功能强大,使用简单
最后给出Demo下载地址
Leakcanary使用Demo
0 0
- LeakCanary使用
- LeakCanary使用
- LeakCanary使用
- 使用leakCanary
- leakcanary使用
- LeakCanary的使用
- LeakCanary的使用
- LeakCanary的使用
- leakCanary 在eclipse使用
- LeakCanary的使用
- LeakCanary的使用
- LeakCanary的简单使用
- Leakcanary初使用小记
- LeakCanary使用简介
- LeakCanary 使用一
- LeakCanary的使用
- leakcanary 使用问题
- LeakCanary的使用
- 2016SDAU编程练习二1009
- {题解}[jzoj4326]NOIP2015提高组Day2 跳石头
- 2.6 Binder机制(MediaService)
- 栈溢出笔记1.9 认识SEH
- C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件
- LeakCanary使用
- bzoj 2961: 共点圆 cdq分治
- 母函数(Generating function)详解(转)
- 2016SDAU编程练习二1013
- uva11297 Census 【二维线段树】
- ViewFlipper实现图片的轮播
- java Swing JTable 隐藏某列
- python:inspect函数自动生成函数名
- 关于Android编程的小问题