2016-08-02 69 views
3

Wir haben LeakCanary integriert, um Probleme mit Speicherlecks zu beheben. Um sicher zu machen haben wir alles aufgebaut rechts Ich habe eine statische Referenz geschaffen, die entfernt werden nicht und sagte leakCanary es zu sehen,LeakCanary fängt keine Lecks ab, die ich absichtlich hinzugefügt habe. Was vermisse ich?

public class Cat { 
} 

public class Box { 
     public Cat hiddenCat; 
} 

public class Docker { 
    public static Box container; 
} 

Im MainActivity

Box box; 
    Cat schrod; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    box = new Box(); 
    schrod = new Cat(); 
    box.hiddenCat = schrod; 
    Docker.container = box; 
    Application.getRefWatcher().watch(schrod); 


    System.gc(); 
} 

in der Application Klasse

private static RefWatcher sRefWatcher; 

    @Override 
    public void onCreate() { 
     sRefWatcher = LeakCanary.install(this); 
    }  
    public static RefWatcher getRefWatcher() { 
     return sRefWatcher; 
    } 

und in der build.gradle Datei:

dependencies { 
     debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' 
     releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1' 
} 

Was fehlt mir, dass es mich nie informiert, dass der Verweis auf das Schrod-Objekt klebt?

Antwort

1

Sie müssen möglicherweise die build.gradle Abhängigkeiten auf die neueste Version (gefunden auf der Getting Started Anleitung auf dieser Seite: https://github.com/square/leakcanary) aktualisieren, die sich gerade befinden:

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' 
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' 
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' 
+1

in der Tat, dass es fixiert. –