为防止Android Xamarin中出现任何内存泄漏,我应该在使用FindViewById后调用Dispose()吗?
一个例子:
void SetTextSomewhereInMyView()
{
var myTextView = FindViewById<TextView>(Resouce.Id.myTextView);
myTextView.Text = "This is my Text View";
// Should I be calling dispose now? or is it OK not to call dispose?
myTextView.Dispose(); // ?
}
我还没有看到Dispose在Xamarin示例中被称为那么多,但后来我在一些地方读到这将是一个很好的做法。最后一句话是什么?
答案 0 :(得分:4)
FindViewById是一个昂贵的电话,你不应该经常这样做。而是将引用保存在字段中,并将该实例置于OnDestroy或OnTrimMemory。
如果您只需要此视图一次,请在使用后立即处理。
答案 1 :(得分:2)
我认为每次需要时调用FindViewById
会比不调用Dispose
的开销更昂贵。我的方法会延迟加载我的观点:
private TextView _myTextView;
public TextView MyTextView
{
get
{
return _myTextView?? (_myTextView= FindViewById<TextView>(Resouce.Id.myTextView));
}
}
void SetTextSomewhereInMyView()
{
MyTextView.Text = "This is my Text View";
}
因此,FindViewById
仅在需要时调用,然后缓存对视图的引用以供日后使用。
简而言之:
如果您想再次使用TextView
,那么您Disposed
就必须致电FindViewById
这是一项昂贵的操作。但是,如果您设置的TextView's Text
值无意再次需要再引用该TextView,则最好调用Dispose