【问题标题】:Android Weak Reference of Inner Class内部类的Android弱引用
【发布时间】:2011-02-15 10:16:45
【问题描述】:

我已经阅读了http://developer.android.com/resources/articles/avoiding-memory-leaks.html 的文章。在本文中,建议使用带有弱引用的静态内部类。

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){

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

}

弱引用的内部类是正确的方法吗?上面的代码内存泄漏安全吗?

【问题讨论】:

    标签: android memory-leaks static weak-references inner-classes


    【解决方案1】:

    如果您只在 GalleryVideo 活动中使用 Adapter 对象,则不需要使用弱引用。

    您的代码 sn-p 是内存泄漏安全的,这取决于您如何处理该 sn-p 之外的那些对象,尽管您的应用程序是否是。

    只需确保在 Activity 中创建的任何引用该 Activity 的对象(尤其包括非静态内部类和匿名类)都不会离开该 Activity。

    【讨论】:

    • 你能详细说明一下吗:“这取决于你对外面的那些对象做什么......”?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多