2016-07-20 1 views
3

최근 내 프로젝트에 leakcanary을 사용하기로 결정 했으므로 테스트를 위해 Activity 빈 프로젝트가 생성되었습니다. (로직 코드 또는 뷰가없는 프로젝트 생성 직후) 앱을 실행할 때 이 라이브러리에서 메모리 누수 로그를 가지고 :비어있는 상태에서 메모리 누수가 발생했습니다.

07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * com.example.leaktest.MainActivity has leaked: 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * GC ROOT static android.app.ActivityThread.sCurrentActivityThread 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * references android.app.ActivityThread.mActivities 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * references android.util.ArrayMap.mArray 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * references array java.lang.Object[].[1] 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * references android.app.ActivityThread$ActivityClientRecord.activity 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * leaks com.example.leaktest.MainActivity instance 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * Retaining: 1.7KB. 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * Reference Key: 9180226a-8a65-4c94-9d12-4562a6d88157 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * Device: Genymotion generic genymotion_vbox86tp_5.1_150409_105318 vbox86tp 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * Android Version: 5.1 API: 22 LeakCanary: 1.4-beta2 3799172 
07-20 04:32:36.742 2967-4915/com.example.leaktest D/LeakCanary: * Durations: watch=5808ms, gc=158ms, heap dump=1953ms, analysis=15795ms 

클래스 :

public class App extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     refWatcher = LeakCanary.install(this); 
    } 

    public static RefWatcher getRefWatcher(Context context) { 
     App application = (App) context.getApplicationContext(); 
     return application.refWatcher; 
    } 

    private RefWatcher refWatcher; 
} 

MainActivity 클래스 :

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     App.getRefWatcher(this).watch(this); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

왜 이런 일이 발생하는지 잘 모르겠지만 누군가 나에게 설명해 주시면 감사하겠습니다.

+0

여기에 무슨 일이 일어나고 있는지 말하기가 어렵습니다 ... 누출 카나리아를 제대로 설정했는지에 대한 코드를 추가하지 않았습니까? – sockeqwe

+0

안녕하세요 @ sockeqwe, 내가 언급 한대로 코드가 없으며 레이아웃 파일에서보기가없는 빈 활동 만 있습니다. –

+0

조각이나 다른 물건이 없습니까? 문서에서 설명한대로'Application.onCreate()'에서 leakcanary를 설정 했습니까? 아니면 MainActivity에서 뭔가를하고 있습니까? – sockeqwe

답변

2

귀하의 RefWatcheronDestroy() 방법에 있어야하지 onCreate() (reported issue here 유사한 참조).

LeakCanary가 Activity 참조를 자동으로 감시하므로이 작업을 수행 할 필요조차 없습니다. FAQ :

LeakCanary.install()은 미리 구성된 RefWatcher를 반환합니다. 또한 Activity.onDestroy()가 호출 된 후 액티비티 유출 여부를 자동으로 감지하는 ActivityRefWatcher를 설치합니다.

+0

누수가 없다는 것을 알려주는 로그를받을 수 있습니까? –

+0

잘 모르겠다. 솔직히. – kcoppock

+0

업데이트 된 답변보기 – kcoppock

관련 문제