源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android内存泄漏排查利器LeakCanary

  • 时间:2021-09-07 22:07 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android内存泄漏排查利器LeakCanary
本文为大家分享了Android内存泄漏排查利器,供大家参考,具体内容如下 开源地址:[url=https://github.com/square/leakcanary]https://github.com/square/leakcanary[/url] 在 build.gralde 里加上依赖, 然后sync 一下, 添加内容如下
dependencies {
 ....
 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
 releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
 testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
 }
省略号代表其他已有内容 在 Application类里面将 LeakCanary 初始化。。 比如叫MyApplication ,如果没有就创建一个,继承 android.app.Application。 别忘了在AndroidManifest.xml中加上,否则不起作用
public class MyApplication extends Application {
 @Override
 public void onCreate() {
  super.onCreate();

  if (LeakCanary.isInAnalyzerProcess(this)) {
   // This process is dedicated to LeakCanary for heap analysis.
   // You should not init your app in this process.
   return;
  }
  LeakCanary.install(this);

  // 你的其他代码从下面开始
 }
}

官方已经有demo了,可以跑跑看。
package com.github.pandafang.leakcanarytest;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;

public class MainActivity extends Activity {

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


 View button = findViewById(R.id.async_task);
 button.setOnClickListener(new View.OnClickListener() {
  @Override public void onClick(View v) {
  startAsyncTask();
  }
 });
 }


 void startAsyncTask() {
 // This async task is an anonymous class and therefore has a hidden reference to the outer
 // class MainActivity. If the activity gets destroyed before the task finishes (e.g. rotation),
 // the activity instance will leak.
 new AsyncTask<Void, Void, Void>() {
  @Override protected Void doInBackground(Void... params) {
  // Do some slow work in background
  SystemClock.sleep(20000);
  return null;
  }
 }.execute();
 }
}
进入主界面按下按钮, 再按返回键退出主界面, 反复几次,LeakCanary  就能探测到内存泄漏了。注意要多操作几次,1次的话泄漏规模太小,可能不会探测到。LeakCanary  一旦探测到会弹出提示的。 回到桌面,会看到一个LeakCanary 的图标,如果有多个app 用到就会有多个LeakCanary图标。 [img]http://files.jb51.net/file_images/article/201703/201703231408456.png[/img] 点进去就会看到内存泄漏记录 [img]http://files.jb51.net/file_images/article/201703/201703231408457.png[/img] 再点进去就可以看到调用栈了 [img]http://files.jb51.net/file_images/article/201703/201703231408468.png[/img] 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部