찾다

 >  Q&A  >  본문

android - 静态方法中可以持有Activity对象吗

静态方法中可以持有Activity对象吗,这么做不好吧
GC的销毁Activity时会不会因为静态方法持有引用而销毁不了啊

PHP中文网PHP中文网2771일 전692

모든 응답(7)나는 대답할 것이다

  • 大家讲道理

    大家讲道理2017-04-17 17:31:34

    메모리 누수에 관한 추천 기사
    Android 메모리 누수 - 전체 분석 및 솔루션

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:31:34

    다음 두 가지 상황을 살펴보면 질문을 이해할 수 있을 것입니다.

    으아아아 으아아아

    A의 정적 메서드 a가 Activity 개체를 전달한 다음 메서드가 종료되고 Activity에서 참조하는 활동의 수명 주기가 종료되므로 문제가 발생하지 않습니다.

    B의 정적 메서드 b는 Activity 개체를 전달하고 B의 멤버 변수 mActivity는 이 참조를 받습니다. 이 정적 멤버 변수는 프로세스에 항상 존재하므로 메모리 누수가 발생합니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:31:34

    메서드 내의 변수는 모두 지역 변수이며 메서드가 완료된 후에는 유지되지 않습니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:31:34

    물론 가능합니다. 아무 문제가 없습니다

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:31:34

    위 답변에 덧붙여, 클래스 B가 정적 내부 클래스이고 활동에 대한 참조를 보유해야 하는 경우 약한 참조를 고려할 수 있습니다.

    으아아아

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:31:34

    위층에 약한 참조 방식을 제안하고, Handler의 정식 사용도 같은 방식입니다

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:31:34

    말이 된다면 당연히 이렇게 사용할 수도 있겠네요

    하지만! ! ! 위에서 언급한 것처럼 메모리 누수가 발생하므로 하지 마세요

    회신하다
    0
  • 취소회신하다