静态方法中可以持有Activity对象吗,这么做不好吧GC的销毁Activity时会不会因为静态方法持有引用而销毁不了啊
认证0级讲师
메모리 누수에 관한 추천 기사Android 메모리 누수 - 전체 분석 및 솔루션
다음 두 가지 상황을 살펴보면 질문을 이해할 수 있을 것입니다.
A의 정적 메서드 a가 Activity 개체를 전달한 다음 메서드가 종료되고 Activity에서 참조하는 활동의 수명 주기가 종료되므로 문제가 발생하지 않습니다.
B의 정적 메서드 b는 Activity 개체를 전달하고 B의 멤버 변수 mActivity는 이 참조를 받습니다. 이 정적 멤버 변수는 프로세스에 항상 존재하므로 메모리 누수가 발생합니다.
메서드 내의 변수는 모두 지역 변수이며 메서드가 완료된 후에는 유지되지 않습니다.
물론 가능합니다. 아무 문제가 없습니다
위 답변에 덧붙여, 클래스 B가 정적 내부 클래스이고 활동에 대한 참조를 보유해야 하는 경우 약한 참조를 고려할 수 있습니다.
위층에 약한 참조 방식을 제안하고, Handler의 정식 사용도 같은 방식입니다
말이 된다면 당연히 이렇게 사용할 수도 있겠네요
하지만! ! ! 위에서 언급한 것처럼 메모리 누수가 발생하므로 하지 마세요
메모리 누수에 관한 추천 기사
Android 메모리 누수 - 전체 분석 및 솔루션
다음 두 가지 상황을 살펴보면 질문을 이해할 수 있을 것입니다.
으아아아 으아아아A의 정적 메서드 a가 Activity 개체를 전달한 다음 메서드가 종료되고 Activity에서 참조하는 활동의 수명 주기가 종료되므로 문제가 발생하지 않습니다.
B의 정적 메서드 b는 Activity 개체를 전달하고 B의 멤버 변수 mActivity는 이 참조를 받습니다. 이 정적 멤버 변수는 프로세스에 항상 존재하므로 메모리 누수가 발생합니다.
메서드 내의 변수는 모두 지역 변수이며 메서드가 완료된 후에는 유지되지 않습니다.
물론 가능합니다. 아무 문제가 없습니다
위 답변에 덧붙여, 클래스 B가 정적 내부 클래스이고 활동에 대한 참조를 보유해야 하는 경우 약한 참조를 고려할 수 있습니다.
으아아아위층에 약한 참조 방식을 제안하고, Handler의 정식 사용도 같은 방식입니다
말이 된다면 당연히 이렇게 사용할 수도 있겠네요
하지만! ! ! 위에서 언급한 것처럼 메모리 누수가 발생하므로 하지 마세요