我对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
。
答案 0 :(得分:1)
是的,在这里使用WeakReference
是个好主意,因为活动可能会被破坏。每次要使用它以避免NullPointerException
时,您必须检查它是否为空。如果它为null,则表示活动已被破坏,因此显示ProgressDialog
通常没有意义。
当然,可以销毁和重新创建活动(例如,因为方向改变)。如果AsyncTask
需要很长时间,则可能会出现进度条不再显示的问题。但是这里的问题是使用AsyncTask
进行长期任务,它们用于短期任务。
另外,请记住,如果将AsyncTask
子类化为Activity
类中的内部类,它将具有对Activity的强引用,因此使用WeakReference
将毫无用处。