使用LeakCanary解决项目内存泄漏

在项目的build.gradle文件添加:
dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
}

在Application类添加:
public class ExampleApplication extends Application {

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

当在你的debug构建过程中出现内存泄露时,LeakCanary将会自动展示一个通知栏。

一. MainSplashActivity 内存泄漏


355804492593131668.jpg

由于MainSplashActivity 继承了 BaseActivity;当启动MainSplashActivity时生命周期走到onstart()方法时,会调用BaseActivity的onStart()方法,它又调用了SoufunApp的mApp.returnForeGround(this)方法;把MainSplashActivity对象传入到SoufunApp中,SoufunApp会一直引用MainSplashActivity 对象

-----BaseActivity-----
@Override
protected void onStart() {
super.onStart();
mApp.returnForeGround(this);
}

由于SoufunApp在APP未销毁时是一直存在的, 通过scan = new ScanTimeDAO(activity); SoufunApp.scan会一直持有MainSplashActivity对象。
即使MainSplashActivity已经finish了,由于SoufunApp.scan还持有MainSplashActivity对象导致对象一直在内存中无法被回收。
-----SoufunApp-----
private ScanTimeDAO scan;
private boolean isFore;
public void returnForeGround(Activity activity) {
//-gly
if(!(activity instanceof MainSplashActivity)){
if (!isFore) {
scan = new ScanTimeDAO(activity);
scan.foreground();
isFore = true;
}
if (!isForeGround && isAppOnForeground()) {
// app 回到前台
scan.foreground();
isForeGround = true;
}
}

二.自定义浏览器leak TexToSpeech(android的一个能把文字读成语音的类)


731177381867283589.jpg

网上错误:has leaked ServiceConnection android.speech.tts.TextToSpeech
解决方案:使用完tts之后,要通过复写Activity的onDestroy方法,关闭tts,否则会抛出泄漏.
@Override
protected void onDestroy() {
if(mTts != null) {
mTts.stop();
mTts.shutdown();
Log.d(TAG, "TTS Destroyed");
}
super.onDestroy();
}

可是我们的错误如上图,在整个项目中兵没有用到TTS(TextToSpeech),初步估计是android厂商的问题,暂时“无解”

三.静态对象导致内存泄漏


537558188572859654.jpg

首先在JiaJuWokFlowActiviry定义了一个全局静态对象
public static Context mcontext;
在oncreate()方法里把当前JiaJuWokFlowActiviry的对象赋值给了mcontext
mcontext = this;
当JiaJuWokFlowActiviry界面finish后,mcontext一直还引用此对象,致使无法回收导致内存泄漏

四.


742651300587760291.jpg

370179125087539110.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,237评论 25 708
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 2,407评论 0 12
  • 转载来之http://blog.nimbledroid.com/2016/05/23/memory-leaks-z...
    坚持编程_lyz阅读 1,068评论 0 0
  • 5月27日,由浏阳市妇联与聂续红心理名师工作室牵头,领着一群志愿者,一行人来到了泮春中学。 上午,成功的举行了"成...
    青皮豆阅读 364评论 1 0
  • 看着孩子的泪眼,我实在是忍不住要说点什么了! 事情是这样的:国庆节前某天早上我们班的一个孩子迟到了,孩子偶尔迟到有...
    灏岚阅读 2,580评论 1 4