최근 내 프로젝트에 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);
}
}
왜 이런 일이 발생하는지 잘 모르겠지만 누군가 나에게 설명해 주시면 감사하겠습니다.
여기에 무슨 일이 일어나고 있는지 말하기가 어렵습니다 ... 누출 카나리아를 제대로 설정했는지에 대한 코드를 추가하지 않았습니까? – sockeqwe
안녕하세요 @ sockeqwe, 내가 언급 한대로 코드가 없으며 레이아웃 파일에서보기가없는 빈 활동 만 있습니다. –
조각이나 다른 물건이 없습니까? 문서에서 설명한대로'Application.onCreate()'에서 leakcanary를 설정 했습니까? 아니면 MainActivity에서 뭔가를하고 있습니까? – sockeqwe