软参考和弱参考

时间:2012-12-10 08:37:23

标签: java android

我对Java环境中的软引用和弱引用感到茫然。我也读过两个主题。总而言之,弱引用正如名称所示,对对象的弱引用。这意味着GC可以轻松收集对此对象的引用。以这种方式创建弱引用:

WeakReference<SomeOtherRef> weakReference = new WeakReference(someOtherRef); 

另一方面,软参考将比弱参考更长时间。所以我的问题是:

在我的应用程序中,我有一个ListView的自定义适配器这个类将处理所有基本的ListView内容作为处理点击等。当用户点击我的列表中的项目时, AsyncTask将启动。

convertView.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                LoadCase loadCase = new LoadCase(position, holder);
                loadCase.execute("");

            }
        });

目前我没有显示任何progressDialog,原因之一。 context对象。我的问题是初始化CustomAdapter的Activity包含许多对象,我必须传递Activity Context的引用以显示ProgressDialog,此将< / strong>导致内存泄漏,是的,我试过了。应用弱/软参考来处理这个问题是否安全? WeakReference可能在某个时候为空...当我尝试初始化NullPointerException时,这会导致ProgressDialog

1 个答案:

答案 0 :(得分:1)

是的,在这里使用WeakReference是个好主意,因为活动可能会被破坏。每次要使用它以避免NullPointerException时,您必须检查它是否为空。如果它为null,则表示活动已被破坏,因此显示ProgressDialog通常没有意义。

当然,可以销毁和重新创建活动(例如,因为方向改变)。如果AsyncTask需要很长时间,则可能会出现进度条不再显示的问题。但是这里的问题是使用AsyncTask进行长期任务,它们用于短期任务。

另外,请记住,如果将AsyncTask子类化为Activity类中的内部类,它将具有对Activity的强引用,因此使用WeakReference将毫无用处。