2017-10-30 2 views
1

은 가정하자 내가 인터페이스 I. 내 뷰 모델 클래스를 구현하는 활동 A (VM)의 I 인터페이스를 구현하는 객체에 대한 참조를 보유하고있다? 또는 ViewMode 클래스의 인터페이스 참조 때문에 객체가 GC에 적합하지 않습니까?ViewModel에이 활동이 구현하는 인터페이스 참조가 있으면 GC에서 활동 참조를 수집합니까? 활동 A가 파괴 경우</p> <pre><code>class A extends Activity implements I{ ... onCreate(){ mViewModel.setI(this); } } class B extends ViewModel { private I iRef; ... } </code></pre> <p>윌 GC 활동 개체를 수집

갱신 : 내 프로젝트 일부 VMHolder 클래스의 모든 VM 저장 빠르게 (활동을) 볼에 할당에서 , 활동이 파괴 될 때 VM 객체가 파괴되지 않도록.

답변

2

GC가 활동 A를 삭제하면 활동 개체가 수집됩니까?

예, 긴 I iRef이 활동하고있는 모든 객체가 가비지 컬렉션을받을 수 있습니다하지 static 아니라 어떤 스레드에서 사용되는대로

개체 때문에 GC 대상에서 제외됩니다 ViewMode 클래스의 인터페이스 참조?

아니, mViewModel 개체의 수명이 짧거나 activit의 객체가 죽으면 너무 활동의 수명에 따라 달라집니다, 그래서 그것의 모든 구성원을한다, 가비지 컬렉션에 대한 문제가 없을 것입니다

+0

내 프로젝트에서는 모든 VM 저장소가보기 위해 VMHolder 클래스에 빠르게 저장 (활동)하므로 VM 개체가 작업이 파괴 될 때 파괴되지 않습니다. –

+0

실제로 view holder와 view model과 VMHolder가하고있는 것을 실제로 얻지는 못했지만 정적 참조가 사용되지 않고 viewmodel을 업데이트하기 위해 threading이 사용되지 않는다면, 메모리 누수를 확인하려면 [일부 inbuild 도구] (https://developer.android.com/studio/profile/am-memory.html)의 도움을받을 수 있습니다. –

관련 문제