4

나는 http://developer.android.com/resources/articles/avoiding-memory-leaks.html 기사를 읽었습니다. 이 기사에서는 Weak Reference가있는 정적 내부 클래스를 사용하는 것이 좋습니다.안쪽 등급의 안드로이드 약한 참조

public class GalleryVideo extends Activity { 

    private int AUDIO_NO = 1; 
    ........................... 
    ................ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     gallery = (Gallery) findViewById(R.id.examplegallery); 
    gallery.setAdapter(new AddImgAdp(this)); 
    } 



    static public class AddImgAdp extends BaseAdapter { 

    private int GalItemBg; 
     private Context cont; 
     private WeakReference<GalleryVideo> mGalleryVideo; 

     public AddImgAdp(Context c) { 

      mGalleryVideo = new WeakReference<GalleryVideo>(c); 

      TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme); 
      GalItemBg = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0); 
      typArray.recycle(); 
     } 


     public long getItemId(int position) { 

      final GalleryVideo galleryVideo = mGalleryVideo.get(); 
      if(galleryVideo == null){ 

       if(galleryVideo.AUDIO_NO==4){ 

       .................. 
       ............... 
       } 
      } 
     } 
    } 

} 

약한 참조로 내부 클래스를 수정하는 올바른 방법입니까? 위의 코드 메모리가 누출되지 않습니까?

답변

2

GalleryVideo 활동 내에서만 어댑터 개체를 사용하는 경우 약한 참조를 사용할 필요가 없습니다.

코드 스 니펫은 메모리 누수에 대해 안전하지 않으므로 해당 스 니펫 외부의 개체로 수행하는 작업이 응용 프로그램인지 여부에 따라 다릅니다.

해당 활동에 대한 참조가있는 (특히 정적이 아닌 내부 클래스와 익명 클래스를 포함하는) 활동 내에 만들어진 개체가 활동을 떠나지 않도록하십시오.

+1

당신은 이것을 정교하게 설명 할 수 있습니까? "그것은 당신이 밖에서 그 물체를 가지고 무엇을 하는가에 달렸습니다 ......"? 감사 –

관련 문제